鍍金池/ 問答/Java  數(shù)據(jù)庫/ ORDER BY DISTINCT LIMIT 同時(shí)使用?

ORDER BY DISTINCT LIMIT 同時(shí)使用?

表字段:user_id,keyword,query_date

現(xiàn)在想實(shí)現(xiàn)查詢某個(gè)user_id按時(shí)間排序的前五個(gè)keyword。由于keyword是可以重復(fù)的,我的SQL如下:

SELECT DISTINCT
  t.keyword,
  t.query_date
FROM t_query_keyword t
WHERE t.user_id = '748761E1-260F-4E61-9D0D-BE6D122560E2'
ORDER BY t.query_date DESC
LIMIT 5;

結(jié)果沒有實(shí)現(xiàn)keyword的去重
圖片描述

請問這個(gè)sql該怎么寫?

回答
編輯回答
夕顏

DISTINCT 針對的是select 后面的所有字段, 如果你想keyword不重復(fù),但對query_date不care, 你可以只取keyword, 如果你想取keywork和相應(yīng)的最大日期的query_date,可以用group by... having ....

如:

drop table t_query_keyword;
create table t_query_keyword(
    user_id varchar(38) ,
    keyword varchar(100),
    query_date date
);


insert into t_query_keyword (user_id, keyword, query_date)
values ('748761E1-260F-4E61-9D0D-BE6D122560E2', 'java',  '2018-01-01'),
('748761E1-260F-4E61-9D0D-BE6D122560E2', 'sql',  '2018-01-02'),
('748761E1-260F-4E61-9D0D-BE6D122560E2', 'sql',  '2018-01-03'),
('748761E1-260F-4E61-9D0D-BE6D122560E2', 'sql',  '2018-01-03'),
('748761E1-260F-4E61-9D0D-BE6D122560E2', 'js',  '2018-01-04'),
('748761E1-260F-4E61-9D0D-BE6D122560E2', 'html',  '2018-01-05'),
('748761E1-260F-4E61-9D0D-BE6D122560E5', 'docker',  '2018-01-06'),
('748761E1-260F-4E61-9D0D-BE6D122560E2', 'kvm',  '2018-01-07');

SELECT DISTINCT
  t.keyword,
  t.query_date
FROM t_query_keyword t
WHERE t.user_id = '748761E1-260F-4E61-9D0D-BE6D122560E2'
ORDER BY t.query_date DESC
LIMIT 6;

返回的結(jié)果是:

+---------+------------+
| keyword | query_date |
+---------+------------+
| kvm     | 2018-01-07 |
| html    | 2018-01-05 |
| js      | 2018-01-04 |
| sql     | 2018-01-03 |
| sql     | 2018-01-02 |
| java    | 2018-01-01 |
+---------+------------+
6 rows in set (0.00 sec)

keyword=sql, query_date=2018-01-03有兩條,但因?yàn)镈ISTINCT, 只返回其中一條。

或者用如下的sql, 可以保證keyword不重復(fù)。

SELECT 
  keyword, max(query_date) as query_date
FROM t_query_keyword
WHERE user_id = '748761E1-260F-4E61-9D0D-BE6D122560E2'
group by keyword
ORDER BY query_date DESC
LIMIT 5;

返回的結(jié)果是

+---------+------------+
| keyword | query_date |
+---------+------------+
| kvm     | 2018-01-07 |
| html    | 2018-01-05 |
| js      | 2018-01-04 |
| sql     | 2018-01-03 |
| java    | 2018-01-01 |
+---------+------------+
5 rows in set (0.00 sec)


2018年6月9日 18:38