2012-03-14 592 views
3

我有一個SQL Server表,其中包含以下日期(OpenDate,ClosedDate,WinnerAnnouncedDate)。SQL Server日期範圍

我有3行,3種不同的類別。

我試圖找出如何我會得到以下情形:

今天是3月14日。我想知道哪個類別的優勝者已經宣佈,但下列類別尚未開始。

所以,如果Row 1OpenDate = 12th FebClosedDate = 10th MarchWinnerAnnounced = 12th March 行2具有16th March我需要找到第1行,因爲冠軍已經宣佈OpenDate,但下面的類尚未開通。

這看起來有點令人困惑,所以如果需要,我會準備好清理一些東西。

+3

更好地提供一些樣本數據和預期的結果。 – 2012-03-14 05:05:14

回答

1

我不是100%清楚你的意思,但我認爲它是這樣的: 找到最後一個獲勝者,比起現在開始日期更早的類別。

如果是這種情況,那麼像這樣的東西可能適合你。我假設你有沒有列入表名

create table #dates (
    id int identity(1,1) primary key, 
    openDate datetime, 
    closedDate datetime, 
    WinnerAnnouncedDate datetime 
) 

insert into #dates 
values ('12 feb 2012', '10 march 2012', '13 march 2012') 


insert into #dates 
values ('12 feb 2012', '10 march 2012', null) 

insert into #dates 
values ('16 mar 2012', null, null) 


select * 
from #dates 
where id = (select max(id) from #dates where openDate <= getdate() and winnerAnnouncedDate is not null) 


--drop table #dates 
+2

請學習使用明確的日期字符串文字。您指定的日期不適用於而不是SQL Server中的英語用戶。而'20120212'將始終指定2012年2月12日。 – 2012-03-14 07:57:59

+0

感謝您的評論。對於產品代碼,我會使用20120212,然而就本例而言,我發現「2012年12月12日」更易於閱讀 – Greg 2012-03-14 22:01:55

1
SELECT TOP 1 WITH TIES * 
FROM atable 
WHERE WinnerAnnouncedDate <= GETDATE() 
ORDER BY WinnerAnnouncedDate 

WITH TIES將返回多行如果有多個WinnerAnnouncedDate值符合條件並具有相同的頂值的表稱爲#dates。