轻松减去年值

Easy substraction of year's values

我确实有以下数据库 table,其中包含 unix 格式的时间戳以及我的太阳能电池板每 5 分钟的总产量(总和):

| Timestamp  | TotalYield |
|------------|------------|
| 1321423500 | 1          |
| 1321423800 | 5          |
| ...        |            |
| 1573888800 | 44094536   |

现在我想计算一下每年产生多少能量。我想到了使用每年的 UNION 读取第一个和最后一个时间戳:

SELECT strftime('%d.%m.%Y',datetime(TimeStamp,'unixepoch')), TotalYield FROM PascalsDayData WHERE TimeStamp IN (
    SELECT MAX(TimeStamp) FROM PascalsDayData GROUP BY strftime('%Y', datetime(TimeStamp, 'unixepoch'))
 UNION
    SELECT MIN(TimeStamp) FROM DayData GROUP BY strftime('%Y',datetime(TimeStamp,'unixepoch')) 
)

这很好用,但我需要做一些 post 处理,用第一年的值减去结束年的值。在 SQL 中一定有更优雅的方法来做到这一点,对吧?

谢谢,

安东

您可以按年份汇总并减去最小值和最大值:

SELECT MAX(TotalYield) - MIN(TotalYield)
FROM PascalsDayData
GROUP BY strftime('%Y', datetime(TimeStamp, 'unixepoch'))

这假设 TotalYield 不会减少 - 正如您的问题所暗示的那样。

如果您确实想要下一个年的值,您可以使用LEAD():

SELECT (LEAD(MIN(TotalYield), 1, MAX(TotalYield) OVER (ORDER BY MIN(TimeStamp) - 
        MIN(TotalYield)
       )
 FROM PascalsDayData
GROUP BY strftime('%Y', datetime(TimeStamp, 'unixepoch'))