ПРИМЕЧАНИЕ : Я вырезал некоторые буквы из имен для правильного форматирования, иначе мне пришлось бы 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
Надеюсь, я дал все необходимые реквизиты.