簡體   English   中英

DATEDIFF結果的聚合函數

[英]Aggregate function on DATEDIFF result

我在MS SQL服務器中有一個表,它有所謂的計划記錄。

每個計划都分配給用戶並具有開始日期。 開始日期時間是相應的時間表有效的時間點。 在該時間點之前,使用具有較早開始日期的計划表。

我需要編寫一個查詢,該查詢確定計划的ID,該計划在當天有效。

假設用戶X有以下記錄,其中包含以下開始日期:

  1. 2008-11-18
  2. 2008-12-15
  3. 2009-07-02
  4. 2009-08-11

在2008-11-18至2008-12-14期間,有效時間表為1.在2008-12-15至2009-07-01期間,有效時間表為2.從2009-07-02至2009年的日期-08-10有效時間表為3.對於2009-08-11及之后的日期,有效時間表為4。

DATEDIFF(day, CAST('X' AS DATETIME), startdate)計算Xstartdate之間的天數。 對於X=2008-12-20 10:00以及上面的startimes,它返回以下值:

  1. -32
  2. -5
  3. 194
  4. 234

為了計算在時間X有效的計划的開始時間,我需要找到一個記錄,其中DATEDIFF(day, CAST('X' AS DATETIME), startdate)返回最大值(最接近零)負值。

為此,我編寫了以下查詢

SELECT startdate, MAX(DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate))
FROM schedules
WHERE (username = 'username') AND (DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate) < 0)
GROUP BY startdate, DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate)

並有望獲得一個行作為一個結果。

但相反,我得到2行:

我應該如何修改查詢以獲得一行最大負值為DATEDIFF(day, CAST('2008-12-20 10:00' AS DATETIME), startdate)

請嘗試使用top with order by

select top 1 s.*
from schedules s
where username = 'username' and CAST('2008-12-20 10:00' AS DATETIME) >= startdate 
order by startdate;

暫無
暫無

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

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