如何使用group by'a'字段合并两个生成的表,最多为'b'字段?

时间:2012-05-23 13:17:30

标签: mysql sql merge group-by union

有下一个查询:

select `privmsgs_id`, `contact`, `privmsgs_date`, `contentType` from (
    (
        select max(`privmsgs_id`) as `privmsgs_id`, `contact`, max(`privmsgs_date`) as `privmsgs_date`, `contentType` from (
            (
                select `privmsgs_from_userid` as `contact`, `privmsgs_id`, `privmsgs_date`, 'message' as `contentType`
                    from `privmsgs_table`
                where `privmsgs_to_userid` = 305026
            ) union (
                select `privmsgs_to_userid` as `contact`, `privmsgs_id`, `privmsgs_date`, 'message' as `contentType`
                    from `privmsgs_table`
                where `privmsgs_from_userid` = 305026
            )
        ) as `tmp` group by `contact` order by `privmsgs_date` desc
    ) union (
        select max(`privmsgs_id`) as `privmsgs_id`, `contact`, max(`privmsgs_date`) as `privmsgs_date`, `contentType` from (
            (
                select `from_userid` as `contact`, `id` as `privmsgs_id`, `date` as `privmsgs_date`, 'postcard' as `contentType`
                    from `postcards_table`
                where `to_userid` = 305026
            ) union (
                select `to_userid` as `contact`, `id` as `privmsgs_id`, `date` as `privmsgs_date`, 'postcard' as `contentType`
                    from `postcards_table`
                where `from_userid` = 305026
            )
        ) as `tmp1` group by `contact` order by `privmsgs_date` desc
    )
) as `rTmp` order by `privmsgs_date` desc;

有两个表tmptmp1由union合并,但字段contact加倍:

privmsgs_id contact privmsgs_date   contentType
21490780    7070    1315207813      message
21556868    7070    1315215266      postcard
21226460    7754    1312025735      message
21539085    15588   1314615528      postcard
21489812    15588   1315208838      message

所以,我只需要最后的记录(消息或明信片 - 无关紧要)和最后一条记录的ID(有问题 - 我可以将消息和明信片中的max(id)分开,但不能这样做在合并表中):

privmsgs_id contact privmsgs_date   contentType
21556868    7070    1315215266      postcard
21226460    7754    1312025735      message
21489812    15588   1315208838      message

原因,为什么我不通过简化查询来做到这一点是我需要一定数量的结果,所以,我只能通过一个查询来做到这一点。

1 个答案:

答案 0 :(得分:0)

您必须按contact对结果进行分组,然后选择最大privmsgd_id,然后仅选择privmsgd_id的信息。

查看GROUP BY了解详情。