假設我想獲得兩個日期之間的利潤。然后我可以做這樣的事情:
SELECT SUM(Profit)
FROM Sales
WHERE date BETWEEN '2014-01-01' AND '2014-02-01' AND <other_filters>
然后,我想將其與前一期抵消固定金額的時間進行比較。可以像這樣寫成兩行:
SELECT SUM(Profit)
FROM Sales
WHERE date BETWEEN '2014-01-01' AND '2014-02-01' AND <other_filters>
UNION ALL
SELECT SUM(Profit)
FROM Sales
WHERE date BETWEEN '2014-01-01' - INTERVAL 1 YEAR AND '2014-02-01' - INTERVAL 1 YEAR AND <other_filters>
有沒有辦法在沒有工會的情況下做到這一點?我正在尋找這樣的東西:
SELECT
SELECT SUM(Profit),
???
FROM Sales
WHERE date BETWEEN '2014-01-01' AND '2014-02-01' AND <other_filters>
我認為這里的棘手部分是如何“取消”偏移時間計算的 where 過濾器。
uj5u.com熱心網友回復:
您可以OR在WHERE子句中使用條件聚合和范圍檢查(除非它們是后續的,在這種情況下您當然可以直接組合它們)。
SELECT sum(CASE
WHEN date >= '2014-01-01'
AND date < '2014-02-02' THEN
profit
ELSE
0
END),
sum(CASE
WHEN date >= '2014-01-01' - INTERVAL 1 YEAR
AND date < '2014-02-02' - INTERVAL 1 YEAR THEN
profit
ELSE
0
END)
FROM sales
WHERE date >= '2014-01-01'
AND date < '2014-02-02'
OR date >= '2014-01-01' - INTERVAL 1 YEAR
AND date < '2014-02-02' - INTERVAL 1 YEAR;
注意:最好不要在BETWEEN這里使用,而是檢查右半開放范圍檢查。這樣,如果精度發生date變化,結果中仍然存在午夜過后的記錄。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360902.html
標籤:sql sql-server 查询语句
上一篇:SQL:試算平衡查詢的PIVOT
