我正在使用 MYSQL 。我有下表:
create table visit (
id int,
seller_number varchar(10),
date_visit date,
city_visited varchar(50),
status varchar(50)
);
此表的示例数据:
id seller_number date_visit city_visited status
10 11111 2005-02-12 Goiania/GO Yes
11 11111 2010-05-19 Marilia/SP Sim
12 11111 2015-01-23 Brasilia/DF No
13 22222 2014-01-02 Brasilia/DF Yes
14 22222 2012-10-21 Goiania/GO No
15 33333 2010-08-09 Marilia/SP No
我需要一个 SQL ,只返回每个卖家最新日期的行,如下所示:
id seller_number date_visit city_visited status
12 11111 2015-01-23 Brasilia/DF No
13 22222 2014-01-02 Brasilia/DF Yes
15 33333 2010-08-09 Marilia/SP No
我使用子查询执行此操作,但 MYSQL不接受LIMIT :
SELECT seller_number, date_visit, city_visited, status FROM visit WHERE (seller_number, date_visit) IN (SELECT seller_number, MAX(date_visit) FROM visit GROUP BY seller_number LIMIT 500);
没有LIMIT它可以工作,但我需要限制它,因为该表有超过3000万个元组,并且无法查询。
是否有其他替代方法可以在子查询中不使用LIMIT来获得此结果?
由于
答案 0 :(得分:2)
您可以使用存在量词和相关子查询,而不是明确选择最大日期:
SELECT
v.seller_number
, v.date_visit
, v.city_visited
, v.status
FROM visit v
WHERE NOT EXISTS (
SELECT *
FROM visit otherVisit
WHERE v.seller_number=otherVisit.seller_number
AND otherVisit.date_visit > v.date_visit
);
答案 1 :(得分:1)
MySQL中有多种方法。你的方法很好,但-target
需要进入外部查询:
LIMIT