Использование счета с дублированием даты и времени - PullRequest
0 голосов
/ 05 июня 2018

У меня есть таблица с повторяющимися датой и временем, у некоторой даты есть дублирующееся время, но я действительно хочу считать ее как 1 с помощью SQL-запроса, отличная не работает, а также не знаете, как это сделать?Цель состоит в том, чтобы подсчитать, сколько скачиваний для каждого регистрационного номера за каждый день.например, 2018-01-08 имеет повторяющееся время начала и должно учитываться как 1.

Мой запрос этого не делает.

Select  StartDate, Starttime, count(*) AS TOTALDOWNLOAD, RegisterNumber 
FROM            `SAMPLE.csv`
WHERE        (MaintenanceFlightTime > 0)
group by StartDate,Starttime, RegisterNumber 
RegisterNumber  StartDate   StartTime
    A         2017-11-27    19:22:17
    A         2017-11-27    19:45:39
    B         2017-11-29    14:09:30
    A         2017-11-28    21:51:38
    A         2017-11-30    17:09:34
    B         2017-12-01    15:19:35
    A         2017-12-01    19:31:42
    B         2017-12-02    14:59:28
    B         2017-12-03    17:38:39
    B         2017-12-03    19:09:19
    B         2017-12-04    10:16:24
    B         2017-12-04    13:43:37
    B         2017-12-05    06:37:22
    A         2017-12-05    10:24:37
    A         2017-12-05    14:40:19
    B         2017-12-05    19:44:06
    A         2017-12-06    08:26:55
    A         2017-12-06    06:30:38
    A         2017-12-06    11:35:41
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52
    A         2018-01-08    06:40:52

Ответы [ 2 ]

0 голосов
/ 05 июня 2018

Вы должны включить в group by только те строки, которые вы хотите в наборе результатов.Итак, если вы хотите считать дни за RegisterNumber, вы должны использовать:

SELECT RegisterNumber, COUNT(DISTINCT StartDate)
FROM `SAMPLE.csv`
WHERE MaintenanceFlightTime > 0
GROUP BY RegisterNumber ;

Если вы хотите посчитать различные комбинации даты и времени, то некоторые базы данных позволяют вам использовать COUNT(DISTINCT) с несколькимиАргументы:

SELECT RegisterNumber, COUNT(DISTINCT StartDate, StartTime)
FROM `SAMPLE.csv`
WHERE MaintenanceFlightTime > 0
GROUP BY RegisterNumber ;

В других случаях вам потребуется использовать функции конкатенации строк или функции даты / времени, чтобы объединить значения в один столбец.В крайнем случае, вы также можете использовать подзапрос:

SELECT RegisterNumber, COUNT(*)
FROM (SELECT DISTINCT RegisterNumber, StartDate, StartTime
      FROM `SAMPLE.csv`
      WHERE MaintenanceFlightTime > 0
     ) s
GROUP BY RegisterNumber ;
0 голосов
/ 05 июня 2018

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

    Select  RegisterNumber, 
            count(distinct StartDate || '-' || Starttime) AS TOTALDOWNLOAD
    FROM            `SAMPLE.csv`
    WHERE        (MaintenanceFlightTime > 0)
    GROUP BY RegisterNumber 
...