2009-07-18 114 views
3

我有两列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 

给定一个日期,应该怎么写我的WHERE子句来回报广大用户的列表该日期,或者如果没有在该日期找到用户用户,返回下一个较早日期的用户列表。例如,如果给定日期是'2009-02-19',则返回的用户列表应该是WilliamAbner

回答

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

你有一个额外的)......它应该是 其中date =(SELECT MAX(指明MyDate)FROM MyTable的WHERE指明MyDate <=“2009-02-19 ') – 2009-07-18 13:45:45

+1

+1只是因为它有如此辉煌的答案。 :P – AnthonyWJones 2009-07-18 21:57:12

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 2009-07-18 13:49:08

0

事情是这样的:

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

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

-1

你可以做这样的事情

SELECT TOP 2 [日期] ,[用户] FROM [LearningDatabase] [DBO]。[用户] WHERE [日期] = '07 /2009分之15 ' 或[日期] < '07/15/2009' 的