Я новичок в SQL-запросах, и у меня возникла ситуация, когда я не знаю, как ее решить.
У меня есть две таблицы, такие как:
Table B
Id AId Timestamp (datetimeoffset(7) column)
1 1 2017-08-31 08:25:32.7000000 -07:00
2 2 2017-08-31 10:25:32.5000000 -05:00
3 2 2017-08-31 10:25:32.9000000 -05:00
4 8 2017-08-31 10:25:32.5000000 -02:00
5 1 2017-05-30 18:31:43.8000000 +03:00
6 7 2017-05-29 18:31:43.8000000 +03:00
Table A
Id Name
1 AA
2 AB
7 AC
8 AD
Я попробовал вот что:
select DATEADD(MINUTE, DATEDIFF(MINUTE, 0, p.Timestamp), 0) as TimestampMinute, count(1) Count
from A a
cross apply (select top 1 b.Timestamp from B b where a.Id=b.AId) p
group by DATEADD(MINUTE, DATEDIFF(MINUTE, 0, p.Timestampl), 0)
order by DATEADD(MINUTE, DATEDIFF(MINUTE, 0, p.Timestampl), 0)
но моя проблема в том, что он должен добавить смещение, а затем округлить до минут и посчитать количество строк в таблице А, в которых есть хотя бы одна запись в эту минуту, но оно просто округляется до минуты, игнорируя смещение и я думаю, что это проблема, почему это считается плохим.
Итак, на дату 2017-08-31 15:25
у меня должно быть 2 строки из таблицы A (Id 1 и 2). Идентификатор 1 из таблицы A соответствует строке 1 таблицы B, а идентификатор 2 - строке 2 и 3 (применяются разные).
Ожидаемый результат:
2017-08-31 15:25 2
2017-08-31 12:25 1
2017-05-30 15:31 1
2017-05-29 15:31 1
Я пытаюсь учиться на ошибках и совершенствоваться, поэтому, пожалуйста, будьте осторожны.