#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, где вам, возможно, придется выводить даты, а затем получать количество на основе этого. Эта простая группировка по может не сработать 🙂