Проблема с задержкой окна sqlzoo # 8: неправильные даты, но правильные пиковые значения - PullRequest
0 голосов
/ 03 августа 2020

ПРИМЕЧАНИЕ : Я вырезал некоторые буквы из имен для правильного форматирования, иначе мне пришлось бы go через каждую строку и делать это вручную. Я не могу понять, почему я получаю неправильные даты, но правильные случаи Peak new covid для страны.

Ссылка на проблему: https://sqlzoo.net/wiki/Window_LAG Проблема № 8

Вот мой мыслительный процесс.

В этом запросе мы должны получить пиковое количество новых случаев для стран, где за один день было зарегистрировано не менее 1000 новых случаев. В этом случае подтвержденный столбец (here,confirmed is equal to new cases reported in a day plus the preceding day's cases) организован накопительным образом. Итак, чтобы получать новые случаи на каждый день, я сделал подзапрос, и в этом запросе я РАЗБИЛ его по имени и ЗАКАЗАТЬ его, подтвердив (new cases,cumulative) от наименьшего к наибольшему, а затем вычел предыдущую строку в текущем разделе. Что тогда дало бы мне таблицу с чистыми новыми случаями за день. После этого в основном запросе я Сгруппировал таблицу по имени (здесь имя - это страна), а затем выбрал группы, в которых было зарегистрировано не менее 1000 случаев, и, наконец, упорядочил их по дате, как показано в ожидаемом результате.

Не знаю, где я ошибся. Кажется, все должно работать.

Мой запрос.

SELECT name, date, MAX(current_cases) FROM (
    SELECT name, DATE_FORMAT(whn,'%Y-%m-%d') AS date, 
    (confirmed - LAG(confirmed,1) OVER(PARTITION BY name ORDER BY confirmed) ) AS current_cases
    FROM covid 
) covid2
WHERE covid2.current_cases >= 1000
GROUP BY name 
ORDER BY date 

Ожидается

name    DATE_FORMAT(w.. peakNewCases
China   2020-02-13  15136
Italy   2020-03-21  6557
Switzer 2020-03-23  1321
Spain   2020-03-25  9630
Israel  2020-03-25  1131
Austria 2020-03-26  1321
Germany 2020-03-27  6933
Iran    2020-03-30  3186
Canada  2020-04-05  2778
Ecuador 2020-04-10  2196
Netherl 2020-04-10  1346
Portug  2020-04-10  1516
United  2020-04-10  33755
Ireland 2020-04-10  1515
United  2020-04-10  8733
Turkey  2020-04-11  5138
France  2020-04-12  26849
Peru    2020-04-13  2265
Belgium 2020-04-15  2454
Brazil  2020-04-17  3257
Japan   2020-04-17  1161
Saudi A 2020-04-18  1132
India   2020-04-19  1893
Russia  2020-04-19  6060
Singapo 2020-04-20  1426
Belarus 2020-04-20  1485

Получено

name    date    MAX(current_c..
China   2020-01-28  15136
Iran    2020-03-06  3186
Italy   2020-03-07  6557
France  2020-03-13  26849
Germany 2020-03-13  6933
Spain   2020-03-13  9630
United  2020-03-16  33755
Switzer 2020-03-19  1321
United  2020-03-20  8733
Israel  2020-03-25  1131
Austria 2020-03-26  1321
Belgium 2020-03-26  2454
Netherl 2020-03-26  1346
Turkey  2020-03-26  5138
Canada  2020-03-30  2778
Brazil  2020-03-31  3257
Portuga 2020-03-31  1516
India   2020-04-06  1893
Russia  2020-04-07  6060
Peru    2020-04-08  2265
Ecuador 2020-04-10  2196
Ireland 2020-04-10  1515
Japan   2020-04-17  1161
Saudi A 2020-04-18  1132
Belarus 2020-04-20  1485
Singapo 2020-04-20  1426

Надеюсь, я дал все необходимые реквизиты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...