我将日期存储在int字段中,当我选择它时,我使用
strftime('%Y-%m-%d', table.date/1000, 'unixepoch') as date
我需要提供过去30天的数据用于制图,这意味着我需要在最终查询中使用以下内容:
2017-01-18,2
2017-01-17,0
2017-01-16,0
2017-01-15,1
在我的表中,我只有1月18日和15日的行。所以对它运行查询,只返回存在的行数,
2017-01-18,2
2017-01-15,1
但是,作为最终结果,我需要在过去30天内拥有0值的行,这些行没有任何值。为了实现这一点,我需要一种方法将我的数据与返回
的查询结合起来现在 - 1天,0
现在 - 2天,0
现在 - 3天,0 ....
过去30天。通过这种方式,当我合并2个查询时,将产生所需的结果。
使用https://stackoverflow.com/a/32987070/379865
我设法获取数据
WITH RECURSIVE dates(date) AS (
VALUES(date('now'))
UNION ALL
SELECT date(date, '-1 day')
FROM dates
limit 30
)
SELECT date, 0 as value FROM dates;
但是我不知道如何将它与我的其他查询结合起来,因为WITH似乎并不是所有联盟的一部分
答案 0 :(得分:0)
我不完全确定你在追求什么,但我会有机会。
按strftime('%Y-%m-%d', table.date/1000, 'unixepoch')
汇总,然后计算。
e.g。
SELECT COUNT(*), strftime('%Y-%m-%d', table.date/1000, 'unixepoch') as date FROM table GROUP BY strftime('%Y-%m-%d', table.date/1000, 'unixepoch')
希望这就是你要找的......
答案 1 :(得分:0)
WITH确实使用复合查询:
WITH ...
SELECT date, 0 AS value FROM dates
UNION ALL
SELECT ...;
但是,要删除存在的日期的虚拟行,您应该使用连接:
WITH ...
SELECT ...
FROM dates
LEFT JOIN (SELECT ...your actual query...)
USING (date);