根据某些标准 (MYSQL) 选择每个重复元组的第一行
selecting top row of each repeating tuple according to some criteria (MYSQL)
我有一个这样的例子table:
Month City Person
8 LHR ABC
10 BEIJING BCS
11 NY JJJ
11 VENICE hghg
11 VENICE KKK
12 NY aa
12 ORL abc
12 ORL bbc
所以我想实现的是在特定月份看到访问人数最多的城市
就像输出应该是:
12 ORL
11 VENINCE
10 BEIJING
8 LHR
我试过像
那样分组
SELECT month, city , count(*) AS 'no of people visiting'
FROM table
GROUP BY month, city
这个table确实告诉我哪个城市和月份位置有多少人
访问但我无法提取最上面的月份和城市组合
关于某个月。
更新查询(有错误)
SELECT *
FROM
( SELECT monthname(reservation.PickupDate), location.LocationName, COUNT(*) AS count
FROM reservation NATURAL JOIN location
WHERE reservation.pickupdate >= DATE_ADD(NOW(), INTERVAL - 3 MONTH)
GROUP BY month(reservation.PickupDate), location.LocationName) AS t1
WHERE NOT EXISTS (SELECT 1
FROM reservation R1 NATURAL JOIN location L1
WHERE monthname(R1.PickupDate) = monthname(t1.PickupDate)
GROUP BY month(R1.PickupDate), L1.LocationName)
从您的查询开始,您只需要消除那些在该月有更多访客的城市的行:
SELECT *
FROM
(SELECT `month`, city, count(*) AS cnt
FROM `table`
GROUP BY `month`, city) t1
WHERE NOT EXISTS(SELECT 1
FROM `table` t2
WHERE t2.`month` = t1.`month`
GROUP BY `month`, city
HAVING count(*) > t1.cnt)
我有一个这样的例子table:
Month City Person
8 LHR ABC
10 BEIJING BCS
11 NY JJJ
11 VENICE hghg
11 VENICE KKK
12 NY aa
12 ORL abc
12 ORL bbc
所以我想实现的是在特定月份看到访问人数最多的城市
就像输出应该是:
12 ORL
11 VENINCE
10 BEIJING
8 LHR
我试过像
那样分组SELECT month, city , count(*) AS 'no of people visiting'
FROM table
GROUP BY month, city
这个table确实告诉我哪个城市和月份位置有多少人
访问但我无法提取最上面的月份和城市组合
关于某个月。
更新查询(有错误)
SELECT *
FROM
( SELECT monthname(reservation.PickupDate), location.LocationName, COUNT(*) AS count
FROM reservation NATURAL JOIN location
WHERE reservation.pickupdate >= DATE_ADD(NOW(), INTERVAL - 3 MONTH)
GROUP BY month(reservation.PickupDate), location.LocationName) AS t1
WHERE NOT EXISTS (SELECT 1
FROM reservation R1 NATURAL JOIN location L1
WHERE monthname(R1.PickupDate) = monthname(t1.PickupDate)
GROUP BY month(R1.PickupDate), L1.LocationName)
从您的查询开始,您只需要消除那些在该月有更多访客的城市的行:
SELECT *
FROM
(SELECT `month`, city, count(*) AS cnt
FROM `table`
GROUP BY `month`, city) t1
WHERE NOT EXISTS(SELECT 1
FROM `table` t2
WHERE t2.`month` = t1.`month`
GROUP BY `month`, city
HAVING count(*) > t1.cnt)