【问题标题】:SQL Query Returns different results based on the number of columns selectedSQL 查询根据选择的列数返回不同的结果
【发布时间】:2011-05-26 00:48:54
【问题描述】:

你好 我正在写一个查询,对我得到的结果有点困惑。

选择不同的(序列号) 来自 AssyQC

此查询返回 309,822 个结果

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

选择不同的(序列号),SCAN_TIME 来自 AssyQC

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

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

谁能向我解释这种行为?

谢谢

【问题讨论】:

标签: sql sql-server-2008


【解决方案1】:

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

您添加的列越多,显然您获得的独特组合就越多。

编辑

来自您对凯德回答的评论

假设我想要最大/最新的 时间戳

这就是你需要的。

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

【讨论】:

  • 我不确定我是否关注,你能详细说明一下吗?
  • 删除重复项时会查看所有选定列中的值。在查询中加括号无效。
  • 好的,我现在明白了。我想我假设因为我输入了它,例如带括号的 distinct(serial_number) 它只适用于该序列号列
  • @AFJ - 那么你想为其他列返回什么?大概有 5 个 serial_number 值在您的问题中的数字中有多个 SCAN_TIME(或者可能 1 个可能有 5 个 scan_times 等)
【解决方案2】:

你可能正在寻找

select distinct on serial_number serial_number, SCAN_TIME from AssyQC

查看这个相关问题:

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

【讨论】:

    猜你喜欢
    • 2014-07-13
    • 2022-09-27
    • 2019-08-11
    • 2021-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多