2011-03-24 138 views
1

我想從測試信息表中獲取的SQL Server 2005上的最後10序列號的列表,我想是這樣的:SQL查詢/子查詢需要幫助

SELECT DISTINCT TOP (10) Serial, DateTime 
FROM [Test].[dbo].[TestInfo] 
WHERE (TestedBy = 'JSMITH') ORDER BY DateTime DESC 

返回重複序列號:

+---------+-------------------------+ 
| Serial | DateTime    | 
+-----------------------------------+ 
| 1114048 | 2011-03-16 11:03:14.000 | 
| 1617683 | 2011-03-11 15:07:29.000 | 
| 1617683 | 2011-03-11 15:07:27.000 | 
| 1617683 | 2011-03-11 15:07:26.000 | 
| 1617683 | 2011-03-10 13:16:04.000 | 
| 1617683 | 2011-03-10 13:15:35.000 | 
| 1617683 | 2011-03-10 13:15:30.000 | 
| 1617683 | 2011-03-07 13:42:48.000 | 
| 1617683 | 2011-03-07 13:40:32.000 | 
| 1617683 | 2011-03-07 13:37:58.000 | 
+---------+-------------------------+ 

有沒有一種方法,或者使用查詢或子查詢來獲取最後的10個序列號沒有重複?

+0

感謝您的幫助,所有。 – 2011-03-24 17:24:49

回答

5
select top (10) Serial, Max(DateTime) 
from [Test].[dbo].[TestInfo] 
where (TestedBy = 'JSMITH') 
group by Serial 
order by Max(DateTime) desc 
+0

是的,這也可以工作! – 2011-03-24 16:18:21

+0

我接受了你的答案,但我從SELECT部分​​刪除了Max(DateTime),因爲我真的只需要序列列表:SELECT TOP(10)Serial FROM [Test]。[dbo]。[TestInfo] WHERE (TestedBy ='JSMITH') GROUP BY Serial ORDER BY Max(日期時間)DESC – 2011-03-24 17:22:59

-1

它返回重複行,因爲每行的日期時間不同。 如果您只需要串行字段,則必須在查詢中只寫入「串行」字段。

1
SELECT TOP 10 
    * 
FROM (SELECT 
     Serial, 
     MAX(DateTime) AS DateTime 
     FROM [Test].[dbo].[TestInfo] 
     WHERE (TestedBy = 'JSMITH') 
     GROUP BY Serial) q1 
ORDER BY q1.DateTime DESC 
+0

是的,它的工作原理! – 2011-03-24 16:17:56

1

大概是這樣的:

SELECT DISTINCT TOP (10) Serial, DateTime 
FROM (
    SELECT Serial, MAX(DateTime) AS DateTime 
    FROM [Test].[dbo].[TestInfo] 
    WHERE (TestedBy = 'JSMITH') 
    GROUP BY Serial 
) AS sub 
ORDER BY DateTime DESC 
+0

是的,這也適用! – 2011-03-24 16:19:29