繁体   English   中英

如何比较 SQL 中同一列中的两个日期

[英]how to compare two dates in same column in SQL

我必须比较它们在表格的一列中的两个日期,我需要这个比较来找到我需要的特定日期之前和之后的日期,我还必须在 3 个不同的列中显示它们

我写了这段代码,但它完全错误:

CREATE VIEW
AS
SELECT (CASE 
        WHEN T1.BuyDate > T2.BuyDate THEN T1.BuyDate END)
AS PreviousBuyDate, T1.ItemName, T1.BuyDate,  
(CASE 
        WHEN T1.BuyDate > T2.BuyDate THEN T1.BuyDate END)
AS  NextDate
FROM FoodSara_tbl T1 , FoodSara_tbl T2
GO

输入:

|ItemName | BuyDate | ItemOrigin |
|---------|---------|------------|
| cake    |2020-10-2| UK         |
| coca    |2020-5-2 | US         |
| cake    |2019-10-6| UK         |
| coca    |2020-12-2| US         |

Output:

|PreviousDate | ItemName | BuyDate |NextDate |
|-------------|----------|---------|---------|
| NULL        |cake      |2019-10-6|2020-10-2|
| NULL        |coca      |2020-5-2 |2020-12-2|
|2019-10-6    |cake      |2020-10-2| NULL    |
| 2020-5-2    |coca      |2020-12-2| NULL    |

PS:我必须安排好日期。

LAG function 试试这个:

select LAG(BuyDate,1) OVER (PARTITION BY ItemName ORDER BY BuyDate asc) previous_date 
     , ItemName
     , BuyDate
     , LAG(BuyDate,1) OVER (PARTITION BY ItemName  ORDER BY BuyDate desc) next_date
from FoodSara_tbl

查看最终结果: sqlfiddle

或者

使用LAGLEAD function:

select LAG(BuyDate,1) OVER (PARTITION BY ItemName order by BuyDate) previous_date 
     , ItemName
     , BuyDate
     , LEAD(BuyDate,1) OVER (PARTITION BY ItemName order by BuyDate) next_date
from FoodSara_tbl

查看最终结果; sqlfiddle

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM