当B列和C列唯一时,如何不选择重复列A的行

时间:2018-03-22 01:10:17

标签: mysql

不确定如何在标题中正确解释这一点,我也可以显示数据。

我有一张表SQLFIDDLE

+----+----------+------------+
| id | session  |  updated   |
+----+----------+------------+
| a  | c9c9c9c9 | 2018-22-03 |
| a  | c9c9c9c9 | 2018-21-03 |
| a  | s9s9s9s9 | 2018-20-03 |
| a  | s9s9s9s9 | 2018-19-03 |
| b  | s8s8s8s8 | 2018-05-02 |
| b  | s8s8s8s8 | 2018-04-02 |
| c  | s7s7s7s7 | 2018-03-01 |
| c  | s7s7s7s7 | 2018-02-01 |
| d  | s2s2s2s2 | 2018-01-01 |
+----+----------+------------+

目前我正在使用此查询

SELECT id, 
       session, 
       Max(updated) AS updated_at 
FROM   reports 
GROUP  BY id, 
          session 
ORDER  BY updated_at DESC 
LIMIT  4 

这是 SQLFIDDLE: http://sqlfiddle.com/#!9/3c5272/1

哪位给了我这个,但我不想要第2行,因为它是重复的ID

+----+----------+------------+
| id | session  |  updated   |
+----+----------+------------+
| a  | c9c9c9c9 | 2018-22-03 |
| a  | s9s9s9s9 | 2018-20-03 |
| b  | s8s8s8s8 | 2018-05-02 |
| c  | s7s7s7s7 | 2018-02-01 |
+----+----------+------------+

我想要这样的结果

+----+----------+------------+
| id | session  |  updated   |
+----+----------+------------+
| a  | c9c9c9c9 | 2018-22-03 |
| b  | s8s8s8s8 | 2018-05-02 |
| c  | s7s7s7s7 | 2018-02-01 |
| d  | s2s2s2s2 | 2018-01-01 |
+----+----------+------------+

我试过

SELECT a.id,
       (SELECT session
        FROM   reports AS b
        WHERE  b.id = a.id
        LIMIT  1),
       Max(a.updated) AS updated_at
FROM   reports AS a
GROUP  BY a.id
ORDER  BY updated_at DESC
LIMIT  4 

但我的MYSQL只是在100%的CPU负载下不断超时,我目前在该表中有大约328745+行。

2 个答案:

答案 0 :(得分:0)

使用" DISTINCT"使用SELECT过滤重复值时。请访问此link以了解有关DISTINCT的更多信息。

答案 1 :(得分:0)

您需要确定如何选择session列中的数据,因为id子句中有sessionGROUP BY,且有多个{ {1}}每sessions

如果这不是问题,请删除id

中的session
GROUP BY

SQL FIDDLE

相关问题