MySQL - COUNT,GROUP BY,ORDER BY并获取最新的Datetime

时间:2017-07-03 02:51:21

标签: mysql count group-by sql-order-by

我有一个消息表,我需要返回COUNT消息,以及特定用户发送或接收的最新消息。

该表如下所示: enter image description here

我得到的结果例如:对于用户ID 10是: enter image description here

但我想要的结果是:

enter image description here

我正在尝试以下方法:

CREATE TABLE messages
(
    `id` INT, 
    `post_id` INT, 
    `post_user_id` INT, 
    `msg_user_id` INT, 
    `msg_from` INT, 
    `message` VARCHAR(55),
    `msg_date` DATETIME
);

INSERT INTO messages VALUES (1, 100, 10, 15, 15, 'message 01', '2017-03-14 00:00:01');
INSERT INTO messages VALUES (2, 100, 10, 15, 10, 'message 02', '2017-03-15 00:00:01');
INSERT INTO messages VALUES (3, 100, 10, 15, 15, 'message 03', '2017-03-16 00:00:01');
INSERT INTO messages VALUES (4, 200, 20, 10, 10, 'message 01', '2017-03-20 00:00:01');
INSERT INTO messages VALUES (5, 200, 20, 10, 20, 'message 02', '2017-03-21 00:00:01');
INSERT INTO messages VALUES (6, 200, 20, 10, 10, 'message 03', '2017-03-25 00:00:01');
INSERT INTO messages VALUES (7, 300, 30, 10, 10, 'message 01', '2017-03-30 00:00:01');
INSERT INTO messages VALUES (8, 300, 30, 10, 30, 'message 02', '2017-03-31 00:00:01');


SELECT *, COUNT(id) as 'counter'
FROM (SELECT *
      FROM messages
      WHERE post_user_id = 10 or msg_user_id = 10
      ORDER BY msg_date DESC) AS t
GROUP BY msg_user_id, post_id
ORDER BY id DESC

但是我没有得到理想的结果,它获得了第一条消息和日期,但我需要最新消息和日期。

有什么想法吗?非常感谢。

1 个答案:

答案 0 :(得分:0)

所需的输出无效,因为在不同的消息日期发布了不同的消息,并且不能仅基于post_user_id和msg_user_id列出计数而不忽略其他参数。例如:在结果的第3行中,所需的计数为3,但所有3条记录都是唯一的,而不是仅发送“Message3”。因此,所需的输出无效。

但是,您可以使用以下指定的查询来获取使用任何特定条件的消息详细信息,即它将打印所有post_user_id = 10或msg_user_id = 10

的消息
spark.sql("select cast(* as String) from table")

现在,在代码中,您可以计算出计数和其他所需的输出。或者您可以触发单独的计数查询。

我希望它有所帮助。