2009-07-18 6 views
3

私は2つの列DateUserを持つSQLテーブルを持っているし、次の行が含まれます。次のケースでSQL ServerにWHERE句を書き込む方法はありますか?

私は私の句はその日のためにユーザーのリストを返すために、または全くない場合は書くべきか、日付、考える
**Date  User** 
    2009-02-20 Danny 
    2009-02-20 Matthew 
    2009-02-15 William 
    2009-02-15 Abner 
    2009-12-14 Joseph 
    1900-01-01 Adam 
    1900-01-01 Eve 

をそのユーザーのユーザーが見つかった場合は、その次の日付のユーザーの一覧を返します。たとえば、指定された日付が '2009-02-19'の場合、返されるユーザーリストはです。Abnerです。

答えて

6
SELECT User 
FROM MyTable 
WHERE MyDate = (SELECT MAX(MyDate) FROM MyTable WHERE MyDate <= '2009-02-19') 
+0

あなたは余分を持っているが)...それは あるべき日=(SELECT MAX(MyDateに該当)MyTableというFROM MyDateに該当<=「2009-02-19 ') –

+1

+1そのような華麗な答え。 :P – AnthonyWJones

0
SELECT * 
FROM [MyTable] t 
INNER JOIN 
    ( 
     SELECT TOP 1 [Date] 
     FROM [MyTable] 
     WHERE [Date] >= @TargetDate 
     ORDER BY [Date] 
    ) d ON t.[Date] = d.[Date] 
5
SELECT [User] FROM myTable WHERE Date = 
    (SELECT Max(Date) FROM myTable WHERE Date <= '2009-02-19') 
+0

これまでにまったく同じことを書いたとき、これはどのように投票されましたか? *頭が傷ついている* – cletus

+2

あなたがレプレタリティを必要としているのと同じように) – Pauk

+0

ホーマーが言ったシンプソンズの言葉を思い出しました。「リサ、アイボリーがたくさんある人は、 " – cletus

0

このような何か:

select Name 
from UnknownTable 
where [Date] = 
    (select Max([Date]) 
    from UnknownTable 
    where [Date] <= '2009-02-19') 

これはあなたの日付の値には時間コンポーネントが存在しない前提としています。あなたはこの

SELECT TOP 2 [日付] ような何かを行うことができ

-1

、[ユーザー] [LearningDatabase] FROM [DBO]。[ユーザー] [日] = '07/2009分の15 ' OR [日] < '07/2009分の15'

+0

OPは、尋ねられた日付にレコードが見つからなかった場合、以前の日付のレコードのみを要求しました。 –