簡體   English   中英

在 SQL 的 where 子句中使用函數

[英]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.xdb1.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM