【问题标题】:SQL - MAX function returning incorrect dataSQL - MAX 函数返回不正确的数据
【发布时间】:2014-01-01 04:31:57
【问题描述】:

我正在尝试解决每个具有 max seq_no 记录的问题,但它返回的数据错误。

这里是查询:

SELECT id, attempt, seq_number, question
FROM question_states
WHERE attempt = 374
AND seq_number IN ( SELECT MAX(seq_number) FROM question_states WHERE attempt = 374 GROUP BY question)
GROUP BY question, id

我有一个表名作为问题,结构如下:-

id--seq_number--attempt--question
1 --0     --374  -- 130
2 --0     --374  -- 130
3 --1     --374  -- 130
4 --2     --374  -- 130
5 --1     --374  -- 131

为什么此查询针对问题 130 返回 2 条记录?如果我删除 GROUP BY id 然后返回错误的数据。

【问题讨论】:

  • 查看类似问题
  • 是的,我看了很多问题 - 但没有结果。
  • 我猜是因为“id”不同
  • 但它有第一组问题!
  • 您是否检查过这部分查询是否给了您预期的结果。 "SELECT MAX(seq_number) FROM question_states WHERE attempt = 374 GROUP BY question"

标签: mysql sql select group-by groupwise-maximum


【解决方案1】:

试试这个:

SELECT id, attempt, seq_number, question
FROM question_states qs 
INNER JOIN (SELECT question, MAX(seq_number) seq_number 
            FROM question_states WHERE attempt = 374 GROUP BY question
           ) AS A ON qs.question = A.question AND qs.seq_number = A.seq_number 
WHERE attempt = 374

SELECT id, attempt, seq_number, question
FROM (SELECT id, attempt, seq_number, question
      FROM question_states WHERE attempt = 374
      ORDER BY question, seq_number DESC
     ) AS A 
GROUP BY question

【讨论】:

  • 在您的第二个答案中,您是否有 SELECT 中不在 GROUP BY 或聚合函数中的字段不能保证一致的风险?是否记录了派生表中使用 ORDER BY 以克服该问题?
【解决方案2】:

在子查询中,由于您使用了 group by,它将返回两个值“2”和“1”。 并且在主查询中,因为您使用了“IN”语句,它将返回字段 seq_number 和尝试 = 374 的所有数据

试试

select max(seq_number), id, attempt, question from question_states group by seq_number ORDER by seq_number DESC limit 1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-22
    • 1970-01-01
    相关资源
    最近更新 更多