Sql 两个日期(第二个日期作为值存储在下一行)之间求和()值的最佳方法-postgres

Sql 两个日期(第二个日期作为值存储在下一行)之间求和()值的最佳方法-postgres,sql,postgresql,datetime,sum,subquery,Sql,Postgresql,Datetime,Sum,Subquery,我有点被psql查询的一个问题所困扰。我知道如何使用循环等来实现这一点,但由于我不是专家,我在SQL中遇到了麻烦 如果我们设想每个学年有3个学期。每个孩子每月可领取午餐津贴。从学期开始到下学期,我想把每月的津贴加起来 我被卡住的地方是下一个术语的日期是terms表中下一行数据中的一个值 我有这样的想法: SELECT terms."startDate", COALESCE(( SELECT SUM("lunch

我有点被psql查询的一个问题所困扰。我知道如何使用循环等来实现这一点,但由于我不是专家,我在SQL中遇到了麻烦

如果我们设想每个学年有3个学期。每个孩子每月可领取午餐津贴。从学期开始到下学期,我想把每月的津贴加起来

我被卡住的地方是下一个术语的日期是
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