我有一个像这样的sql表:
Id Date Price
1 21.09.09 25
2 31.08.09 16
1 23.09.09 21
2 03.09.09 12
所以我需要的是获取每个 id 的最小和最大日期以及它们之间的天数差异。这很容易。使用 SQLlite 语法:
SELECT id,
min(date),
max(date),
julianday(max(date)) - julianday(min(date)) as dif
from table group by id
然后是棘手的问题:我怎样才能收到这个差异期间每天的价格。我的意思是这样的:
ID Date PricePerDay
1 21.09.09 25
1 22.09.09 0
1 23.09.09 21
2 31.08.09 16
2 01.09.09 0
2 02.09.09 0
2 03.09.09 12
我按照您提到的日历创建了一个 cte,但不知道如何获得所需的结果:
WITH RECURSIVE
cnt(x) AS (
SELECT 0
UNION ALL
SELECT x+1 FROM cnt
LIMIT (SELECT ((julianday('2015-12-31') - julianday('2015-01-01')) + 1)))
SELECT date(julianday('2015-01-01'), '+' || x || ' days') as date FROM cnt
附:如果它采用 sqllite 语法,那就太棒了!
最佳答案
您可以使用递归 CTE 来计算最小日期和最大日期之间的所有天数。剩下的只是一个左连接
和一些逻辑:
with recursive cte as (
select t.id, min(date) as thedate, max(date) as maxdate
from t
group by id
union all
select cte.id, date(thedate, '+1 day') as thedate, cte.maxdate
from cte
where cte.thedate < cte.maxdate
)
select cte.id, cte.date,
coalesce(t.price, 0) as PricePerDay
from cte left join
t
on cte.id = t.id and cte.thedate = t.date;
关于sql - 用 SQL 计算每天,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39545063/