2012-03-08 61 views
0

我想做一個SQL查詢,獲取今天的日期和日期列中的最近日期。所以,如果我有三個記錄在我的數據庫具有以下日期:如何獲取SQL中的最新日期?

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

我想要的SQL查詢返回2012年3月8日和2012年3月2日(最近的日期)的所有記錄。我怎樣才能做到這一點?

我可以使用DATE今天的日期:

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) + '%' 

但這返回「日期」欄沒有。

謝謝

+0

這是SQL的服務器嗎? – Ben 2012-03-08 20:19:55

+2

如果表中沒有今天的日期,該怎麼辦?那麼只返回1行? – 2012-03-08 20:20:45

+0

謝謝大家。我有它選擇日期。我在我的帖子上做了編輯,如果有人可以幫我解決我的下一個問題:) – user974873 2012-03-08 21:31:03

回答

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

這是一個腳本示例,可以滿足您的要求。它使用一個子查詢來選擇日期爲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 
) 
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 
1

關於第二個問題:

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

很棒! =) – user974873 2012-03-08 21:50:12