我是这个论坛的新手,我希望能找到解决我问题的方法。
我有这张桌子:
name time points car date
Daniel | 55s | 210 | red |20/01/2018
Daniel | 45s | 250 | green |21/01/2018
Julie | 54s | 220 | red |19/01/2018
Julie | 33s | 150 | yellow|22/01/2018
我希望像这样排序
name time points car date
Daniel | 45s | 250 |green |21/01/2018
Julie | 54s | 220 |red |19/01/2018
首先按点排序,而不是按时间排序和按名称分组(可选择计数)
我用这个
SELECT NAME, MAX(POINTS) POINTS, MAX(TIME) TIME, MAX(CAR) CAR, MAX(DATE) DATE
FROM ( SELECT A.* FROM test A LEFT OUTER JOIN test B ON A.NAME=B.NAME AND
A.POINTS<B.POINTS AND A.TIME>B.TIME WHERE B.NAME IS NULL ) as sub GROUP BY NAME
我得到了这个:
name POINTS TIME CAR DATE
Daniel 250 45 green 2018-01-21
Julie 220 54 yellow 2018-01-22
朱莉应该有车=红色&amp; 2018年1月19日
丹尼尔看起来不错
我怎样才能得到这个值(汽车和日期)?
感谢 尼科
答案 0 :(得分:0)
你可以试一试。它包含反对自己的表,只获得具有最高点和最短时间的记录。
SELECT NAME, MAX(POINTS) POINTS, MAX(TIME) TIME
FROM
(
SELECT A.* FROM test A
LEFT OUTER JOIN test B ON A.NAME=B.NAME AND A.POINTS<B.POINTS AND A.TIME>B.TIME
WHERE B.NAME IS NULL
) GROUP BY NAME
如需更多信息,请尝试以下操作:
SELECT * FROM
(
SELECT OUTERTEST.*,
@row_num := IF(@prev_value=OUTERTEST.name,@row_num+1,1) AS RowNumber,
@prev_value := OUTERTEST.name
FROM (SELECT * FROM TEST ORDER BY NAME, TEST.POINTS DESC, TEST.TIME ASC) OUTERTEST, (SELECT @row_num := 1, @prev_value := '') x
) A
WHERE A.ROWNUMBER=1
答案 1 :(得分:0)
我用这张表做了更多测试
id name time points
1 Daniel 55 1140
2 Judie 54 1144
3 Judie 33 1028
4 Daniel 45 1180
5 Judie 53 1148
我申请此请求
SELECT NAME, MAX(POINTS) POINTS, sub.TIME FROM (SELECT * FROM Testpoint ORDER BY POINTS DESC, TIME ASC) AS sub
GROUP BY sub.name
我有每个名字的最高分,但时间不是正确的
name POINTS time
Daniel 1180 55
Judie 1148 54
Judie应该有53个时间而不是54个
我做错了什么?
三江源 尼科