簡體   English   中英

T-SQL的最大日期和兩個日期之間的最小日期

[英]T-SQL max date and min date between two date

首先,感謝您的時間和幫助!

我有兩個表:

表格1

PersId     name       lastName   city
---------------------------------------
1          John       Smith      Tirana
2          Leri       Nice       Tirana
3          Adam       fortsan    Tirana

表2

Id       PersId      salesDate
--------------------------------------------
1         1          2017-01-22 08:00:40 000
2         2          2017-01-22 09:00:00 000
3         1          2017-01-22 10:00:00 000
4         1          2017-01-22 20:00:00 000
5         3          2017-01-15 09:00:00 000
6         1          2017-01-21 09:00:00 000
7         1          2017-01-21 10:00:00 000
8         1          2017-01-21 18:55:00 000

我想查看每個城市在每個日期的兩個日期之間的第一筆近期交易,如果我沒有交易,希望將其清空

 SalesDate > '2017-01-17 09:00:00 000' 
 and SalesDate < '2017-01-23 09:00:00 000'

表2,id = 5,因為記錄不在指定的日期范圍內

如果我希望我的結果看起來像

Id      PersId     MinSalesDate                 MaxSalesDate             City 
-----------------------------------------------------------------------------
1         1        2017-01-22 08:00:40 000      2017-01-22 20:00:00 000 Tirana
2         2        2017-01-22 09:00:00 000      null                   Tirana
3         3        null                         null                   Tirana
4         1        2017-01-21 09:00:00 000      2017-01-21 18:55:00 000   Tirana

您無法確定如何在結果中獲取ID。 您似乎只想要Row_Number()。 我會把它排除在外,但這應該可以幫助您入門。 您可能需要在數據范圍檢查中解決轉換問題,而我還沒有檢查查詢中的語法錯誤,我將留給您。

Select T1.PersId, City
     , Min(T2.salesDate) MinSalesDate
     , Max(T2.salesDate) MaxSalesDate
   From Table1 T1
   Left Join Table2 T2 
     On T1.PersId = T2.PersId 
    And T2.salesDate Between '2017-01-17 09:00:00 000' And < '2017-01-23 09:00:00 000'
   Group BY T1.PersId, T2.City

使用row_number嘗試以下操作以獲取最小和最大銷售日期:

        SELECT 
            T2.Id, T1.PersId, T2.MIN_salesDate, T2.MAX_salesDate, T1.City
        FROM Table1 T1
        LEFT JOIN
        (
            SELECT MIN(Id) as Id, PersId, MIN(salesDate) as MIN_salesDate, MAX(salesDate) as MAX_salesDate 
            FROM
            (
                SELECT 
                     *
                    ,ROW_NUMBER() OVER (PARTITION BY PersId ORDER BY salesDate ASC) as RNKMIN
                    ,ROW_NUMBER() OVER (PARTITION BY PersId ORDER BY salesDate DESC) as RNKMAX 
                FROM Table2 T2 
                WHERE salesDate Between '2017-01-17 09:00:00 000' And '2017-01-23 09:00:00 000'
            ) temp
            WHERE RNKMIN = 1 or RNKMAX = 1
            GROUP BY PersId
        ) T2
        on T1.PersId = T2.PersId

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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