如何在SQL中获取最新日期?

时间:2012-03-08 20:15:24

标签: sql date

我想创建一个SQL查询,从日期列获取今天的日期和最近的日期。因此,如果我的数据库中有三条记录具有以下日期:

  • 2012年3月8日
  • 2012年3月2日
  • 2011年12月8日

我希望SQL查询返回2012年3月8日和2012年3月2日(最近的日期)的所有记录。我怎么能这样做?

我可以使用以下日期约会:

CONVERT( varchar(100), DATEADD( DAY, 0, getdate() ), 111)

谢谢

编辑: 感谢大家。我还有一个问题。我创建了两个视图:

create view with top dates
CREATE VIEW topDates AS
select DISTINCT TOP 3 replace(CONVERT(VARCHAR(20),date,111),'-','/') AS dates from     CSAResults.dbo.Details

create view dateTwo
select *
from (select ROW_NUMBER() over (order by dates desc) as srNo, dates
    from topDates)
    AS employee
    WHERE srNo=2

现在我想从我的数据库中选择*,其中列等于“dateTwo”视图中的“日期”列

select buildNumber
from CSAResults.dbo.Details
where buildNumber LIKE '%Main '+ (SELECT dates FROM dateTwo) + '%'

但这没有任何回报。

由于

4 个答案:

答案 0 :(得分:2)

您可以执行以下操作:

select date
from yourtable
where 
(
    date = Convert(varchar(10), getdate(), 101)
    OR
    date IN (SELECT Max(date) 
                FROM yourtable
                WHERE date!= Convert(varchar(10), getdate(), 101))
)

答案 1 :(得分:1)

这是一个执行您要求的示例脚本。它使用子查询来选择日期上具有MAX的所有记录。您只需添加一个OR来选择当前日期的项目。

    DECLARE @A TABLE
(
part_no VARCHAR(5),
rev CHAR,
on_hand TINYINT,
safety_stock TINYINT,
so_no VARCHAR(5),
so_date DATETIME
)


INSERT @A
SELECT '12345', 'A', 10, 15, 'S1234', '12/14/2009' UNION ALL
SELECT '12345', 'A', 10, 15, 'S1233', '10/01/2009' UNION ALL
SELECT '12345', 'A', 10, 15, 'S1232', '08/02/2009' UNION ALL
SELECT '12346', '',  5, 0, 'S1231', '08/01/2009' UNION ALL
SELECT '12347', '-', 0, 0, 'S1230', '10/20/2009' UNION ALL
SELECT '12347', '-', 0, 0, 'S1229', '07/15/2009'

SELECT * FROM @A AS A
WHERE so_date =
(
    SELECT MAX(so_date)
    FROM @A AS B
    WHERE B.part_no = A.part_no AND B.Rev = A.Rev 
)

答案 2 :(得分:1)

SELECT *
INTO #TEMP
FROM
(
SELECT GETDATE() DATE_FIELD, 'Blah1...' OTHER_FIELDS
UNION SELECT GETDATE() DATE_FIELD, 'Blah2...' OTHER_FIELDS
UNION SELECT DATEADD(d,-1,GETDATE()) DATE_FIELD, 'Blah3...' OTHER_FIELDS
UNION SELECT DATEADD(d,-1,GETDATE()) DATE_FIELD, 'Blah4...' OTHER_FIELDS
UNION SELECT DATEADD(d,-3,GETDATE()) DATE_FIELD, 'Blah5...' OTHER_FIELDS
) A

SELECT * FROM #TEMP

SELECT * FROM
(
 SELECT DATE_FIELD, OTHER_FIELDS,
 DENSE_RANK() OVER (ORDER BY DATE_FIELD DESC) _RANK
 FROM #TEMP
) A
WHERE A._RANK < 3

答案 3 :(得分:1)

关于你的第二个问题:

select buildNumber
from CSAResults.dbo.Details
inner join dateTwo
on buildNumber LIKE '%Main '+ dateTwo.dates + '%'