如何仅一次选择最新(和多个)值?

油腻的驴子

我试图找到与用户ID1进行过对话的人员(例如,交换的消息)。我只需要一次其他用户的ID,但是我想按日期(或最高ID,因为ID是增量键)排序结果ID,在该日期中每个用户与用户的最新对话(消息)1发生了 用户1可以是发送消息的人,也可以是接收消息的人,无论哪种情况都算作“对话”或与其他用户的交互。

这就是我在做什么

    SELECT fromId AS userId FROM messaging
      WHERE toId = 1
    UNION
    SELECT toId AS userId FROM messaging
      WHERE fromId = 1

但是,当然,这仅返回每个用户的ID,但不会按消息发生的顺序返回结果。例如,如果用户与用户ID 5的对话,而该消息的ID高于他与用户6的对话,则顺序必须为5, 6

有什么办法可以只通过一个查询来做到这一点?

谢谢。

帕拉

您的关系还算合理,只需要为日期添加一个额外的字段,然后按ID分组,然后按最长时间排序即可。像这样:

select id, max(message_time)
  from
    (select fromid id, message_time
       from messaging
       where toid = 1
     union
     select toid id, message_time
       from messaging
       where fromid = 1
    ) q
    group by id
    order by max(message_time) desc;

这是为您准备的小提琴示例:http ://sqlfiddle.com/#!9/ d248e/2

根据评论请求进行编辑

该查询将获取每个对话的最新消息以及消息文本。

select t1.id, t1.message_time, t1.message
  from
    (select fromid id, message_time, message
       from messaging
       where toid = 1
     union
     select toid id, message_time, message
       from messaging
       where fromid = 1
    ) t1
    left join
    (select fromid id, message_time, message
       from messaging
       where toid = 1
     union
     select toid id, message_time, message
       from messaging
       where fromid = 1
    ) t2
    on t1.id = t2.id and t1.message_time < t2.message_time
    where t2.id is null
    order by t1.message_time desc;

该查询的基本要旨与先前的查询相同-构建一个派生表,其中仅包含用户ID,消息日期,这次还包含消息。将派生表与用户ID左连接(从而重复并集查询),但消息时间也更长。因为我们保持联接状态,所以如果没有消息具有相同的用户名,但时间戳较大,则结果的后半部分将为空。这表示我们拥有最新的消息时间以及文本。然后剩下要做的就是根据这些空值进行过滤并排序。

更新的小提琴

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何仅使用一次随机值集中的值

来自分类Dev

加和,但每组匹配值仅出现一次

来自分类Dev

如何使多个页面使用的图像仅加载一次

来自分类Dev

如何使用alljoyn传输一次选择的多个文件

来自分类Dev

如何选择cte一次更新多个表列?

来自分类Dev

如何仅根据值执行一次PERFORM语句

来自分类Dev

如何仅使用awk一次以产生不同的值

来自分类Dev

如何一次从数组中删除多个值

来自分类Dev

如何一次旋转多个值列?

来自分类Dev

如何显示和计算平均值?以及如何仅将值写入文本文件一次?

来自分类Dev

一次选择多个选项

来自分类Dev

仅反应一次更新值

来自分类Dev

姜戈选择。如何将选项设置为仅选择一次

来自分类Dev

jQuery选择器仅获取每个值的第一次出现

来自分类Dev

jQuery选择器仅获取每个值的第一次出现

来自分类Dev

一次选择的值重复

来自分类Dev

在CASE语句中返回多个结果时,仅更新一次行值

来自分类Dev

正则表达式,允许字母和仅一次出现选择的特殊字符

来自分类Dev

正则表达式,允许字母和仅一次出现选择的特殊字符

来自分类Dev

如何仅设置一个RadioButton一次可以在RadioGroup中选择

来自分类Dev

熊猫一次替换多个值

来自分类Dev

一次重塑多个值

来自分类Dev

WPF一次触发多个值

来自分类Dev

一次查询多个值

来自分类Dev

如何使警报仅出现一次

来自分类Dev

如何使UIrotategesture仅调用一次?

来自分类Dev

如何让多个指令在一个服务中仅调用一次相同的诺言?

来自分类Dev

一次仅选择一个区域

来自分类Dev

一次仅选择一个区域