This feels a little kludgy, but what about:
- Buffer one dataset (I am assuming you are working with points) by 200 m.
- Buffer the other dataset by a very small amount, say 0.25 m.
- Perform intersection of the two buffered datasets. This takes care of the distance criteria.
Now, because buffer and intersection both carry attributes to the newly created features, the polygons formed by the intersection will have the attributes from both sets of input points.
- Add a new field to the intersection polygons and use the field calculator to calculate the time difference between the two datasets.
- Select by attributes to get the intersection polygons where the absolute value of the time difference is greater than 30 minutes and delete them. This takes care of the time criteria.
- Use the remaining intersection polygons and a select by location to select the points from whichever dataset was used to generate the smaller buffers originally and delete them.
- Merge the two datasets into a final composite dataset.
You mentioned that there can be multiple incidents at the same location. Does that mean exactly the same location? For step 2, you want to specify a buffer size small enough that the buffers do not overlap with other buffers in that same dataset. You can use Near with a point dataset and itself to see how far the closest points are to each other. See this related answer.
If the points do coincide exactly, step 2 won't work. In that case, you could use ArcPy and an update cursor to jitter the points (i.e., move each in a different small random direction) before hand. See, for example, this answer (with example code). Store the X and Y components of the move vector in new attributes so you can move the points back later (if desired). The magnitude of the move should be larger than the small buffer size; but not so large as to change the results of the 200 m buffer.