[英]For a specific user_id get the latest rows (time-wise) that this user is in with all other users, in MySQL
[英]get latest points for all users
我正在获取最新的时间戳记,但是分数比较旧。我正在寻找具有最新分数的最新时间戳记作为响应,并且每个接收者只能获取最后一个。 http://www.sqlfiddle.com/#!2/07d11/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),
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)
);
INSERT INTO tblA (sender, receiver,msg,date,points ) VALUES
('1', '2', 'buzz ...','2011-08-21 14:11:09','10'),
('1', '2', 'test ...','2011-08-21 14:12:19','20'),
('1', '3', 'buzz ...','2011-08-21 14:11:09','10'),
('1', '3', 'test ...','2011-08-21 14:12:19','20'),
('1', '4', 'buzz ...','2011-08-21 14:11:09','10'),
('1', '4', 'test ...','2011-08-21 14:12:19','20');
INSERT INTO tblB (sno, name ) VALUES
('1', 'Aa'),
('2', 'Bb'),
('3', 'Cc'),
('4', 'Dd'),
('5', 'Ee'),
('6', 'Ff'),
('7', 'Gg'),
('8', 'Hh');
sql:
select *, max(date)
from tblA a join
tblB b
on b.sno in (a.receiver)
group by b.name
order by max(date) desc;
尝试类似:
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
这个想法是通过从tblB
选择每条记录的最大日期来首先选择所需的行(子查询)。 接下来,您可以将这些记录与原始表连接起来以获取分数。
这是一般的想法。 您可以计算出细节
select field1, field2, etc
from table
join (
select id, max(timestamp) maxts
from table
where whatever
group by id ) temp on table.id = temp.id
where whatever
and timestamp = ts
您看到的地方在任何地方都必须相同。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.