MySQL的奇怪行为是由?

时间:2014-11-20 10:40:12

标签: mysql group-by

我有这个stockmoves表:

id  serial  op_date   from  to
23  aaa1    2014-11-10  0   8
24  aaa2    2014-11-10  0   8
25  aaa3    2014-11-10  0   8
26  aaa1    2014-11-18  8   1
27  aaa2    2014-11-15  8   9
28  aaa2    2014-11-19  9   8
29  aaa2    2014-11-20  8   10

(请忽略列名,我将它们缩短为更简洁,只是为了发布在这里,即使它们可能是保留的sql名称。)

我想提取一个独特的连续剧列表,其中包含他们对某个"到"的最新日期。 (产品发送的位置)。如果我这样做:

SELECT serial, MAX(op_date) as max_op_date
FROM stockmoves 
WHERE to = 8
GROUP BY serial;

我得到了预期的(好的)答案:

serial  max_op_date
aaa1    2014-11-10
aaa2    2014-11-19
aaa3    2014-11-10

但是,如果我在结果中添加"来自"专栏,像这样:

SELECT serial, from, MAX(op_date) as max_op_date
FROM stockmoves 
WHERE to = 8
GROUP BY serial;

我对序列号aaa2 imho的答案不正确:

serial from max_op_date 
aaa1    0   2014-11-10 
aaa2    0   2014-11-19 
aaa3    0   2014-11-10

而不是预期的:

serial from max_op_date
aaa1    0   2014-11-10
aaa2    9   2014-11-19
aaa3    0   2014-11-10

我错过了什么或我的旧版MySQL(我被迫使用)有问题吗?不应该与"来自"值是否具有max(op_date)值?

提前谢谢你,

修改

好的,以下建议是一个更复杂的陈述,可以满足我的需要:

SELECT sm1.serial, sm1.op_date, sm1.from
FROM stockmoves sm1
JOIN (
        SELECT serial, max(id) as max_id
        FROM stockmoves 
        WHERE to = 8
        GROUP BY serial
) sm2 ON (sm2.max_id = sm1.id)

谢谢!!!

0 个答案:

没有答案