mysql - 即使 2 条记录具有相同的时间戳也获取最新条目

标签 mysql sql

我正在使用下面的代码来检索所有用户的最新数据。但是如果用户在同一时间戳添加了点,那么我想获得最后一个条目,而不是像下面的示例中那样。我如何确保我获得最新条目,即使 2 条记录具有相同的时间戳也是如此。

http://sqlfiddle.com/#!2/374db/1

非常感谢任何帮助。提前致谢。

CREATE TABLE if not exists tblA
(
id int(11) NOT NULL auto_increment ,
sender varchar(255),
receiver varchar(255),
 msg varchar(255),
 date timestamp,
  points varchar(255),
  refno varchar(255),
 PRIMARY KEY (id)
);

CREATE TABLE if not exists tblB
(
id int(11) NOT NULL auto_increment ,
sno varchar(255),
name varchar(255),
 PRIMARY KEY (id)
);

CREATE TABLE if not exists tblC
(
id int(11) NOT NULL auto_increment ,
data varchar(255),
  refno varchar(255),
  extrarefno varchar(255),
 PRIMARY KEY (id)
);


INSERT INTO tblA (sender, receiver,msg,date,points,refno ) VALUES
('1', '2', 'buzz ...','2011-08-21 14:11:09','10','001'),
('1', '2', 'test ...','2011-08-21 14:12:19','20','002'),
('4', '2', 'test ...','2011-08-21 14:13:19','30','003'),
('1', '3', 'buzz ...','2011-08-21 14:11:09','10','004'),
('1', '3', 'test ...','2011-08-21 14:12:19','20','005'),
('1', '4', 'buzz ...','2011-08-21 14:11:09','10','006'),
('1', '4', 'test ...','2011-08-21 14:12:19','20','007'),
('3', '4', 'test ...','2011-08-21 14:13:19','20','008'),
('2', '4', 'test ...','2011-08-21 14:13:19','20','009');



INSERT INTO tblB (sno, name ) VALUES
('1', 'Aa'),
('2', 'Bb'),
('3', 'Cc'),
('4', 'Dd'),
('5', 'Ee'),
('6', 'Ff'),
('7', 'Gg'),
('8', 'Hh');


INSERT INTO tblC (data,refno,extrarefno ) VALUES
('data1', '001', '101'),
('data2', '002', '102'),
('data3', '003', '103'),
('data4', '004', '101'),
('data5', '005', '102'),
('data6', '006', '103'),
('data7', '007', '101'),
('data8', '008', '101'),
('data9', '009', '101');

/// 查询:

SELECT *
FROM (

  SELECT tblB.*, MAX(tblA.date) AS date
  FROM tblB
  JOIN tblA ON tblB.sno = tblA.receiver
  GROUP BY tblB.sno

) AS subset
JOIN tblA ON subset.sno = tblA.receiver 
            AND subset.date = tblA.date JOIN tblC ON tblA.refno=tblC.refno 

最佳答案

关键思想是使用 id 列而不是 date 列。它是自动递增的,所以最大的 id 应该是最近的。

但是,您的查询还有另一个问题,即在子查询中连接到 tblBtblB 中的任意(“不确定”)值将在外部查询中返回。相反,只需聚合 tblA 并将 join 移动到 tblB 到外层:

SELECT *
FROM (SELECT tblA.receiver, MAX(tblA.id) AS id
      FROM tblA
      GROUP BY  tblA.receiver
    ) subset JOIN
    tblA
    ON subset.receiver = tblA.receiver AND subset.id = tblA.id JOIN
    tblB
    on tblA.receiver = tblB.sno join
    tblC
    ON tblA.refno=tblC.refno ;

关于mysql - 即使 2 条记录具有相同的时间戳也获取最新条目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21673843/

相关文章:

mysql - 为什么会自动为外键字段创建索引?

SQL - 选择字符串的一部分

java - jOOQ 代码生成 : forcedType

php - 我可以在PHP中混合使用MySQL API吗?

mysql - 如何优化大表上的计数 SQL 查询

仅当其他表中的字段满足条件时 MySQL UPDATE

mysql - 'table.column' 中的未知列名称 'field list'

mysql - mysql如何向表中添加计数列

sql - 在sql server中将中间名首字母与名字分开

sql - 如何从单独的脚本创建数据库?