Я новичок в SQL, и я подумал, что хорошим способом применить то, что я знаю, было бы попытаться найти небольшой проект, который я нашел. Мне удалось найти годовой доход, но приглашение запрашивает изменение в процентах по сравнению с предыдущим годом. Я не могу понять, как добавить столбец с этим процентным изменением.
Я пытался использовать ISNULL, DATEDIFF и LAG, но не думаю, что использую его правильно.
Вот код, который создает таблицу:
SELECT CAST(strftime('%Y', InvoiceDate) AS integer) AS YearOfSale, SUM(Total) AS TotalRev
FROM invoices
GROUP BY 1;
И код, который я пытался использовать для создания нового столбца:
WITH yearlySales AS (
SELECT CAST(strftime('%Y', InvoiceDate) AS integer) AS YearOfSale, SUM(Total) AS TotalRev
FROM invoices
GROUP BY 1
)
SELECT X.*, ISNULL(DATEDIFF(year, X.PREVDATE, X.YearOfSales),0) AS YearDiff
FROM (SELECT y.*, LAG(y.YearlySales) OVER( ORDER BY YEARLYSALES) AS PREVDATE FROM yearlySales y )X;
Я ожидаю, что столбец будет выглядеть следующим образом:
+------------+----------+-------------+
| YearOfSale | TotalRev | PercentDiff |
+------------+----------+-------------+
| 2009 | 449.46 | 7.12 |
+------------+----------+-------------+
| 2010 | 481.45 | -2.46 |
+------------+----------+-------------+
| 2011 | 469.58 | 1.69 |
+------------+----------+-------------+
| 2012 | 477.53 | -5.64 |
+------------+----------+-------------+
| 2013 | 450.58 | null |
+------------+----------+-------------+
Мой код даже не скомпилируется в браузере БД для SQLite.