2011-10-20 16 views
2
----------------------------------------------- 
Value  ISRepeat Changed 
------------------------------------------------ 
666-66-8888 NULL 2011-10-19 15:28:47.310 
555-55-6666 NULL 2011-10-19 15:27:26.413 
444-44-5555 NULL 2011-10-19 15:25:02.660 
333-33-4444 NULL 2011-10-19 15:23:57.120 
222-22-3333 NULL 2011-10-19 15:13:57.903 
222-22-2222 NULL 2011-10-19 15:13:03.517 
100-10-2222 NULL 2011-10-19 15:07:52.010 
100-10-1111 NULL 2011-10-19 15:06:59.690 

我有一張這樣的桌子。我想打印的價值如何在T-SQL中打印最新的一行?

555-55-6666 NULL 2011-10-19 15:27:26.413 

這是以前到最近的值最後,但表中的一行基於時間(改列)......條件是時間。我怎樣才能做到這一點?

+0

可能重複的[SQL Server中的行偏移](http://stackoverflow.com/questions/187998/row-offset-in-sql-server) – Phil

回答

3

最近時間被發現:

SELECT MAX(Changed) AS second_latest 
    FROM AnonymousTable 
WHERE Changed < (SELECT MAX(Changed) AS most_recent FROM AnonymousTable) 

所以,你選擇相關行:

SELECT * 
    FROM AnonymousTable 
WHERE Changed = 
     (SELECT MAX(Changed) AS second_latest 
      FROM AnonymousTable 
     WHERE Changed < (SELECT MAX(Changed) AS most_recent FROM AnonymousTable) 
     ) 

有可能是做這一個更合適的方法,而這種技術並不能一概而論很好地第三或第四的最新值。 OLAP功能很可能有所幫助。

1

試試這個:

select top 1 * 
from YourTable 
where Changed not in 
(
    select max(Changed) 
    from YourTable 
) 
order by Changed desc 

或者:

SELECT MAX(Changed) AS most_recent FROM AnonymousTable 

您是否希望最大時間小於該行:

select * 
from 
(
    select ROW_NUMBER() over (order by Changed desc) as row_num, 
     * 
    from YourTable 
) a 
where row_num = 2 
+0

@ Rocky111怎麼這樣?當你嘗試它們時,輸出是什麼?他們在我的機器上工作。 – 2011-10-20 05:00:30