简体   繁体   English

如何从sqlitedatabase中的表从每个组中获取第一行?

[英]How to get first row from each group from a table in sqlitedatabase?

I have a table messages in my sqlite database.This table has three columns msg_id,sender_id,msg_body. 我的sqlite数据库中有一个表消息。该表具有三列msg_id,sender_id,msg_body。 I need to get one latest message with each user_id and these messages should be ordered in desc order. 我需要获取每个user_id的最新消息,并且这些消息应按desc顺序排序。 for eg. 例如 my messages table is 我的消息表是

 msg_id | sender_id | msg_body
--------+-----------+----------
   1    |    18     |"something"
   2    |    18     |"something"
   3    |    19     |"something"
   4    |    19     |"something"

What I want is table:- 我想要的是桌子:-

msg_id | sender_id | msg_body
-------+-----------+----------
  4    |    19     |"something"
  2    |    18     |"something"

One option would be to do an INNER JOIN of your original table with a subquery containing the most recent record for each sender_id group: 一种选择是使用包含每个sender_id组的最新记录的子查询对原始表进行INNER JOIN

SELECT t1.msg_id, t1.sender_id, t1.msg_body
FROM yourTable t1
INNER JOIN
(
    SELECT sender_id, MAX(msg_id) AS max_msg_id
    FROM yourTable
    GROUP BY sender_id
) t2
    ON t1.msg_id = t2.max_msg_id AND t1.sender_id = t2.sender_id

Follow the link below for a running demo: 请点击以下链接以获取正在运行的演示:

SQLFiddle SQLFiddle

Try this: 尝试这个:

SELECT t1.*
FROM mytable AS t1
JOIN (
   SELECT sender_id, MAX(msg_id) AS max_msg_id
   FROM mytable
   GROUP BY sender_id
) AS t2 ON t1.sender_id = t2.sender_id AND t1.msg_id = t2.max_msg_id

最后显示给发件人的消息。

SELECT * FROM messagees group by sender_id order by id msg_id

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM