2012-03-14 31 views
3

次の日付(OpenDate,ClosedDateWinnerAnnouncedDate)を含むSQL Serverテーブルがあります。SQL Serverの日付範囲

私は3つの異なるカテゴリに対して3つの行を持っています。

私は次のシナリオを取得する方法を把握しようとしている:

今日は3月14日です。勝者が発表されたカテゴリはどれか分かりますが、次のカテゴリはまだ始まっていません。 Row 1OpenDate = 12th FebClosedDate = 10th Marchを持っていた場合

だから、WinnerAnnounced = 12th March 行2は、受賞者が発表されましたが、次のカテゴリにはまだ開いていないので、私はそれが行1を見つける必要がある16th MarchOpenDateを持っていました。

これは少し混乱しているように見えるかもしれません。必要な場合は、私はこれをクリアする準備が整います。

+3

いくつかのサンプルデータと予想されるレスツールを提供してください。 –

答えて

1

あなたの言っていることは100%明確ではありませんが、私はそれが次のようなものだと思います。 開始日が今より早いカテゴリーから発表された最後の受賞者を見つけます。

これが当てはまる場合、このようなものがあなたのために働くかもしれません。あなたはテーブル名を含めていないように私はいくつかのWinnerAnnouncedDate値が条件に合致し、同じトップ価値を持っている場合は、いくつかの行を返します

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日を常に指定します。 –

+0

コメントありがとうございます。プロダクションコードでは20120212を使用しますが、この例の目的では'12 feb 2012 'が読みやすくなりました – Greg

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

WITH TIESあなたのテーブルが#datesと呼ばれていると仮定しています。