SQL查询根据所选列数返回不同的结果

时间:2011-05-25 16:30:27

标签: sql sql-server-2008

您好 我正在写一个查询,对我得到的结果感到困惑。

选择distinct(serial_number) 来自AssyQC

此查询返回309,822结果

但是,如果我修改select语句以包含不同的列,如下所示

选择distinct(serial_number),SCAN_TIME 来自AssyQC

查询返回309,827个结果。我添加的列越多,显示的结果就越多。

我认为结果只会绑定到最初返回的不同的serial_number。这就是我想要的,只有不同的serial_numbers

有人可以向我解释这种行为吗?

由于

2 个答案:

答案 0 :(得分:1)

SELECT distinct适用于整个选定的列列表,而不仅仅是serial_number

您添加的列越多,显示您获得的组合就越多。

修改

来自你对Cade的回答的评论

  

让我说我想要最大/最新   时间戳

这就是你所需要的。

SELECT serial_number, MAX(SCAN_TIME) AS SCAN_TIME
FROM AssyQC
GROUP BY serial_number

或者如果您想要其他列

;WITH CTE AS
(
SELECT *,
       ROW_NUMBER() OVER (PARTITION BY serial_number 
                              ORDER BY SCAN_TIME DESC) AS RN
FROM AssyQC
)
SELECT *
FROM CTE 
WHERE RN=1

答案 1 :(得分:0)

你可能正在寻找

select distinct on serial_number serial_number, SCAN_TIME from AssyQC

请参阅此相关问题:

SQL/mysql - Select distinct/UNIQUE but return all columns?