[英]using a function in where clause for SQL
我試圖在 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
我需要使用該函數,因為它將包含沒有值的特殊日期
編輯:
抱歉我收到的錯誤信息含糊不清
消息 557,級別 16,狀態 2,第 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
首先你使用LEFT JOIN
因為第一次約會沒有“上一個日期”。 您可能想要處理該空值。
然后在連接中使用 doble 條件,首先db1.x = db2.x
和db1.date > db2.date
以確保匹配較早的日期。
在where
你必須確保你選擇了確切的前一個日期。
這應該適用於 MySql 或 SqlServer,但在 sql server 中您可以使用窗口函數以獲得更好的結果。
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.