对于以下情况,我应该如何在SQL Server中编写WHERE子句?

时间:2009-07-18 13:35:28

标签: sql sql-server

我有一个包含两列DateUser的SQL表,并包含以下行:

    **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

给定一个日期,我应该如何编写WHERE子句以返回该日期的用户列表,或者如果找不到该日期的用户用户,则返回下一个较早日期的用户列表。例如,如果给定日期为“ 2009-02-19 ”,则返回的用户列表应为威廉 Abner

5 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:5)

SELECT [User] FROM myTable WHERE Date =
  (SELECT Max(Date) FROM myTable WHERE Date <= '2009-02-19')

答案 2 :(得分: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]

答案 3 :(得分:0)

这样的事情:

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

这假设您的日期值没有时间组件。

答案 4 :(得分:-1)

你可以做这样的事情

选择TOP 2 [日期]       ,[用户]   FROM [LearningDatabase]。[dbo]。[用户]   在哪里[日期] = '07 / 15/2009'   或[日期]&lt; '07 / 15 / 2009' 的