Выполнить разделение даты и получить количество записей за заданный период времени (2 столбца даты) с помощью SQL

#sql #db2

#sql #db2

Вопрос:

Мои данные таблицы ввода выглядят следующим образом

ID Из даты На сегодняшний день
GHI 2016-01-01 2016-12-31
GHI 2016-01-01 2016-12-31
ABC 2016-01-01 2016-01-31
ABC 2016-02-01 2016-12-31
ABC 2016-01-01 2016-01-31
ABC 2016-02-01 2016-12-31
ABC 2016-01-01 2016-01-31
ABC 2016-02-01 2016-12-31
DEF 2016-01-01 2016-12-31
DEF 2016-01-01 2016-12-31
DEF 2016-01-01 2016-10-24
DEF 2016-01-01 2016-12-31
JKL 2016-01-01 2016-12-31
JKL 2016-01-01 2016-12-31
JKL 2016-01-01 2016-12-31
JKL 2016-01-01 2016-03-04
JKL 2016-04-01 2016-12-31
JKL 2016-01-01 2016-03-04
JKL 2016-04-01 2016-12-31

Я хочу, чтобы мой вывод выглядел следующим образом, в основном количество, основанное на идентификаторе и периоде времени (от и до даты). например: простой случай: для ID GHI есть 2 записи, охватывающие весь период, отсюда и количество 2.

Умеренно сложный случай: давайте рассмотрим ID DEF, здесь есть 4 записи, 3 из которых охватывают период с 2016-01-01 по 2016-12-31 и 1, охватывающий с 2016-01-01 по 2016-10-24.

Шаг 1: из приведенного выше случая я знаю, что мой минимальный период — 2016-01-01, а максимальный период — 2016-12-31.

Шаг 2: на основе записей в таблице для этого идентификатора я перейду к получению разбиения дат, и это будет с 2016-01-01 по 2016-10-24 и с 2016-10-25 по 2016-12-31

Шаг 3. Получение количества записей, охватываемых за этот период. это станет

с 2016-01-01 по 2016-10-24 (Count = 4, поскольку для идентификатора DEF имеется 4 записи, охватывающие этот период) и с 2016-10-25 по 2016-12-31 (Count = 3, поскольку для идентификатора DEF имеется только 3 записи, охватывающие этот период)

ID Из даты На сегодняшний день ПОДСЧЕТ
GHI 2016-01-01 2016-12-31 02
ABC 2016-01-01 2016-01-31 03
ABC 2016-02-01 2016-12-31 03
DEF 2016-01-01 2016-10-24 04
DEF 2016-10-25 2016-12-31 03
JKL 2016-01-01 2016-03-04 05
JKL 2016-03-05 2016-03-31 03
JKL 2016-04-01 2016-12-31 05

Комментарии:

1. Я не уверен, как подойти к этому, я бы хотел, чтобы это было сделано с помощью db2, но я не против, если этого можно достичь с помощью любой другой СУБД. Заранее спасибо!

2. для ID GHI есть 2 записи, охватывающие весь период, отсюда и количество 2. Я НЕ вижу, где вы определяете, что такое «весь период»… теперь это выглядит как тривиальная группировка по 3 столбцам…

3. GHI был самым простым, поэтому я поставил его сверху, период может быть динамическим для каждого идентификатора, поэтому нам придется выводить их самостоятельно, прежде чем мы сможем подсчитать их.

Ответ №1:

 SELECT ID, [From Date], [To Date], COUNT(*)
FROM YourTable t
GROUP BY ID, [From Date], [To Date]
 

Вы хотели бы использовать GROUP BY для объединения строк, которые совпадают по определенным столбцам, а затем вы хотите получить COUNT(*) для количества записей, содержащихся в каждой из этих групп.

Следуйте некоторым руководствам на учебном сайте, это будет рассмотрено очень рано: https://www.w3schools.com/sql /

Комментарии:

1. Спасибо, но я не уверен, была ли у вас возможность заглянуть в идентификатор JKL, где вам, возможно, придется выводить даты, а затем получать количество на основе этого. Эта простая группировка по может не сработать 🙂

2. @HariPrasshanth Я думаю, вам нужно отредактировать свой пост и предоставить более подробное объяснение того, что вы хотите. В противном случае все подумают, что это простое решение для группировки.

3. Спасибо @Chad Baldwin, я сделаю это сейчас.

Ответ №2:

Попробуйте это

 SELECT ID,FROMDATE,TODATE,COUNT(*) FROM TABLE
GROUP BYID,FROMDATE,TODATE
 

Комментарии:

1. Спасибо, но я не уверен, была ли у вас возможность заглянуть в идентификатор JKL, где вам, возможно, придется выводить даты, а затем получать количество на основе этого. Эта простая группировка по может не сработать 🙂