我的日历年从07 - 01-(一年的)到06 - 30-(下一年的)。
我的SQLITE DB有一个Timestamp列,它的数据类型是datetime,并将时间戳存储为2023 - 09 - 01 00:00:00。
我想做的是在我的财政年度中获得数据库中所有年份的最新降雪日期。
我已经尝试了下面这个查询的许多变体。这个查询说它运行时没有错误,并且返回"null"值。我正在使用SQLITE DB Browser来编写和测试这个查询。
SELECT Timestamp, MAX(strftime('%m-%d-%Y', Timestamp)) AS lastDate,
snowDepth AS lastDepth FROM DiaryData
WHERE lastDepth <> 0 BETWEEN strftime('%Y-%m-%d', Timestamp,'start of year', '+7 months')
AND strftime('%Y-%m-%d', Timestamp, 'start of year', '+1 year', '+7 months', '- 1 day')
ORDER BY lastDate LIMIT 1
这是我测试数据库里的内容
Timestamp snowFalling snowLaying snowDepth
2021-11-10 00:00:00 0 0 7.2
2022-09-15 00:00:00 0 0 9.5
2022-12-01 00:00:00 1 0 2.15
2022-10-13 00:00:00 1 0 0.0
2022-05-19 00:00:00 0 0 8.82
2023-01-11 00:00:00 0 0 3.77
如果它运行正常,我应该期望:
| 时间戳|最后日期|最后深度|
| - ------|- ------|- ------|
| 2022年5月19日00时00分|二○二二年五月十九日|八点八二分|
我错过了什么,或者这在SQLITE中是不可能的?任何帮助都将不胜感激。
3条答案
按热度按时间fdbelqdn1#
利用SQLite的空列功能按财政年度进行汇总:
请参见demo。
unftdfkk2#
您可以使用
ROW_NUMBER
窗口函数来解决这个问题,但需要进行一些细微的调整。为了考虑财政年度,您可以将年份划分为向前滑动6个月的时间戳。这样,类似于[2021 - 01 - 01,2021 - 12 - 31]的范围将改为滑动到[2021 - 06 - 01,2022 - 05 - 31]。检查here演示。
l7mqbcuq3#
我会先得到每个记录的季节,然后是相对于记录的季节开始日期的降雪日期,最后是相对于记录的季节开始日期的最大降雪日期:
demo