Sql 两个日期(第二个日期作为值存储在下一行)之间求和()值的最佳方法-postgres
我有点被psql查询的一个问题所困扰。我知道如何使用循环等来实现这一点,但由于我不是专家,我在SQL中遇到了麻烦 如果我们设想每个学年有3个学期。每个孩子每月可领取午餐津贴。从学期开始到下学期,我想把每月的津贴加起来 我被卡住的地方是下一个术语的日期是Sql 两个日期(第二个日期作为值存储在下一行)之间求和()值的最佳方法-postgres,sql,postgresql,datetime,sum,subquery,Sql,Postgresql,Datetime,Sum,Subquery,我有点被psql查询的一个问题所困扰。我知道如何使用循环等来实现这一点,但由于我不是专家,我在SQL中遇到了麻烦 如果我们设想每个学年有3个学期。每个孩子每月可领取午餐津贴。从学期开始到下学期,我想把每月的津贴加起来 我被卡住的地方是下一个术语的日期是terms表中下一行数据中的一个值 我有这样的想法: SELECT terms."startDate", COALESCE(( SELECT SUM("lunch
terms
表中下一行数据中的一个值
我有这样的想法:
SELECT
terms."startDate",
COALESCE((
SELECT
SUM("lunch")
FROM
"allowance"
WHERE
TO_CHAR(terms."startDate", 'YYYY-MM') >= TO_CHAR("date", 'YYYY-MM')
AND
TO_CHAR(terms."startDate", 'YYYY-MM') < TO_CHAR(??? HELP ???, 'YYYY-MM')
),0) AS "lunchMoney"
FROM "schoolTerms" AS terms
...
选择
术语:“开始日期”,
结合((
挑选
SUM(“午餐”)
从…起
“津贴”
哪里
TO_CHAR(术语“startDate”,“YYYY-MM”)>=TO_CHAR(“date”,“YYYY-MM”)
及
TO_CHAR(术语“startDate”,“YYYY-MM”)
我把放到了_CHAR(?HELP??,'YYYY-MM')
我想参考孩子下学期的开始日期。我曾研究过使用LEAD()
方法,但没有弄清楚
任何帮助都将不胜感激。我想您需要加入并聚合:
select t.startdate, t.enddate, sum(a.lunch) as lunch_money
from schoolterms t
inner join allowance a on a.date >= t.startdate and a.date < t.enddate
group by t.startdate, t.enddate
当前,
enddate
不是表中的值,而是下一行的startdate
。这就是我遇到麻烦的地方。同样要澄清的是,我所说的“孩子”并不是指程序意义上的孩子,而是指婴儿/孩子/孩子等。我知道这可能令人困惑
select t.startdate, t.enddate, sum(a.lunch) as lunch_money
from (
select start_date,
lead(startdate) over(order by startdate) enddate
from schoolterms
) t
inner join allowance a
on a.date >= t.startdate
and (a.date < t.enddate or t.enddate is null)
group by t.startdate, t.enddate