我尝试使用where子句中的函数来获取上一个营业日期,以便计算表格中列的增量
我使用了以下查询:
select db1.x, db2.date, db1.date, db1.y as ValNow, db2.y as ValPrevious
from db db1, db db2
where db1.x = 275305
and db1.x = db2.x
and (dbo.getLastBusinessDate(db1.date) = db2.date)
order by db1.date
我需要使用该功能,因为它将包含没有值的特殊日期
编辑:
很抱歉,我收到的错误是
Msg 557,Level 16,State 2,Line 1 只能在函数内执行函数和一些扩展存储过程。
我只想现在并排显示值以确认sql语句是否正常工作,我打算使用以下语句来计算delta
select db1.date, db1.x, (db1.y - db2.y) as delta , DAY(db1.date), DAY(db2.date)
from
db db1
inner JOIN db db2 on db1.x = db2.x and dbo.getLastBusinessDate(db1.date) = db2.date
order by date desc
答案 0 :(得分:0)
首先使用LEFT JOIN
,因为第一个日期没有“上一个日期”。您可能希望处理null。
然后在联接中使用doble条件,首先是db1.x = db2.x
和db1.date > db2.date
,以确保您匹配早期日期。
在where
中,您必须确保选择确切的上一个日期。
这应该在MySql或SqlServer中都有效,但是在sql server中你可以使用window函数来获得更好的结果。
SELECT
db1.x,
db2.date,
db1.date,
db1.y as ValNow,
db2.y as ValPrevious
FROM
db db1
LEFT JOIN db db2
ON db1.x = db2.x
AND db1.date > db2.date
WHERE db1.x = 275305
AND not exist (SELECT db3.date
FROM db db3
WHERE db3.date > db2.date
AND db3.date < db1.date)
ORDER BY db1.date