В SQL как вытащить дату записи и минимальную дату для группы? - PullRequest
0 голосов
/ 04 апреля 2019

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

| Location | ticketPeriod | UserID | ticketUses | Demographic |    Date    |
|----------|--------------|--------|------------|-------------|------------|
| London   | Day          |      1 |          1 | Adult       | 21/03/2019 |
| London   | Day          |      1 |          2 | Adult       | 06/02/2019 |
| Glasgow  | Day          |      1 |          1 | Adult       | 04/04/2019 |
| Glasgow  | Day          |     12 |          3 | Child       | 03/04/2019 |
| Glasgow  | Day          |      3 |          1 | Child       | 04/01/2019 |
| Glasgow  | Week         |      2 |          3 | Child       | 27/01/2019 |
| Glasgow  | Month        |      3 |          3 | Concession  | 04/04/2019 |
| London   | Annual       |      5 |          2 | Concession  | 15/02/2019 |
| London   | Quarterly    |      5 |          1 | Adult       | 13/02/2019 |
| Cardiff  | Annual       |      5 |          1 | Adult       | 24/01/2019 |
| Cardiff  | Quarterly    |      1 |          1 | Child       | 11/03/2019 |
| London   | Week         |      3 |          2 | Child       | 04/04/2019 |
| Cardiff  | Week         |     12 |          4 | Adult       | 04/04/2019 |
| London   | Annual       |      3 |          9 | Adult       | 04/04/2019 |

я пытаюсь сгруппировать данные, чтобы получить минимальную дату и количество ticketUse для каждой группы, но сохранить поле даты, как показано ниже;

| Location | ticketPeriod | UserID | ticketUses | Demographic |    Date    |  MinDate   | countTicketUses |
|----------|--------------|--------|------------|-------------|------------|------------|-----------------|
| Cardiff  | Annual       |      5 |          1 | Adult       | 24/01/2019 | 24/01/2019 |               1 |
| Cardiff  | Quarterly    |      1 |          1 | Child       | 11/03/2019 | 11/03/2019 |               1 |
| Cardiff  | Week         |     12 |          4 | Adult       | 04/04/2019 | 04/04/2019 |               4 |
| Glasgow  | Day          |      3 |          1 | Child       | 04/04/2019 | 04/01/2019 |               5 |
| Glasgow  | Day          |      3 |          3 | Child       | 03/04/2019 | 04/01/2019 |               5 |
| Glasgow  | Day          |      3 |          1 | Child       | 04/01/2019 | 04/01/2019 |               5 |
| Glasgow  | Week         |      2 |          3 | Child       | 27/01/2019 | 27/01/2019 |               6 |
| Glasgow  | Week         |      3 |          3 | Child       | 04/04/2019 | 27/01/2019 |               6 |
| London   | Day          |      1 |          1 | Adult       | 21/03/2019 | 06/02/2019 |              17 |
| London   | Day          |      1 |          2 | Adult       | 06/02/2019 | 06/02/2019 |              17 |
| London   | Day          |      5 |          2 | Adult       | 15/02/2019 | 06/02/2019 |              17 |
| London   | day          |      5 |          1 | Adult       | 13/02/2019 | 06/02/2019 |              17 |
| London   | day          |      3 |          2 | Adult       | 04/04/2019 | 06/02/2019 |              17 |
| London   | day          |      3 |          9 | Adult       | 04/04/2019 | 06/02/2019 |              17 |

В основном эквивалент группы, мутировать в R.

1 Ответ

3 голосов
/ 04 апреля 2019

Вы можете сделать это с помощью оконных функций:

select Location, 
       ticketPeriod,
       UserID, 
       ticketUses, 
       Demographic, 
       Date, 
       min(date) over (partition by ticketPeriod, Demographic) as MinDate, 
       sum(ticketUses) over (partition by ticketPeriod, Demographic) as countTicketUses 
from the_table;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...