简体   繁体   English

我的SQL查询以主键值的降序获取不同的记录

[英]my sql query to fetch distinct records in descending order of primary key value

I am executing the below query 我正在执行以下查询

SELECT SQL_CALC_FOUND_ROWS movie_id,video_id,created_date 
FROM video_logs 
WHERE user_id = 2693 AND 
    studio_id=223 AND 
    (DATE_FORMAT(created_date,"%Y-%m-%d") BETWEEN "2018-03-16 11:12:12" AND 
    "2018-04-11 20:21:44") 
order by id desc;



+----------+----------+---------------------+
| movie_id | video_id | created_date        |
+----------+----------+---------------------+
|     3751 |     6711 | 2018-04-11 02:19:18 |
|      544 |     2347 | 2018-04-11 14:16:57 |
|      564 |     2367 | 2018-04-11 14:16:08 |
|     1083 |     2998 | 2018-04-11 02:15:21 |
|      544 |     2347 | 2018-04-11 14:14:55 |
|      536 |     2339 | 2018-04-11 14:14:09 |
|     3014 |     5857 | 2018-04-11 01:58:03 |
|     3011 |     5855 | 2018-04-11 13:55:37 |
|     3011 |     5855 | 2018-04-11 13:39:59 |
|     3751 |     6711 | 2018-04-11 01:39:08 |
|     3014 |     5857 | 2018-04-11 01:38:37 |
|     3007 |     5852 | 2018-04-11 13:37:49 |
+----------+----------+---------------------+

I wish distinct out put from the above result without hampering the order of movie_id column. 我希望在不影响movie_id列顺序的情况下,将上述结果与众不同。

Like My out put should have movie_id column as follows 像我的输出应该有movie_id列如下

movie_id movie_id

3751 544 564 1083 536 3014 3011 3007 3751 544 564 1083 536 3014 3011 3007

Thanks In advance for helping me out. 在此先感谢您的帮助。

You need to group by the movie ID. 您需要按电影ID分组。 Also, you can use either MIN() or MAX() on the created date to choose which to show when there are multiple rows for a movie_id. 另外,您可以在创建日期使用MIN()或MAX()来选择当movie_id有多行时显示的内容。

SELECT SQL_CALC_FOUND_ROWS movie_id,video_id,min(created_date) as created_date
FROM video_logs 
WHERE user_id = 2693 AND 
    studio_id=223 AND 
    DATE_FORMAT(created_date,"%Y-%m-%d") BETWEEN "2018-03-16 11:12:12" AND "2018-04-11 20:21:44"
group by movie_id
order by id desc;

Group your column by then use MAX function to get the latest (highest) datetime value. 通过对列进行分组,然后使用MAX函数获取最新(最高)的日期时间值。

SELECT SQL_CALC_FOUND_ROWS movie_id,video_id,MAX(created_date) as created_date  
FROM video_logs 
WHERE user_id = 2693 AND 
    studio_id=223 AND 
    (DATE_FORMAT(created_date,"%Y-%m-%d") BETWEEN "2018-03-16 11:12:12" AND 
    "2018-04-11 20:21:44") 
GROUP BY SQL_CALC_FOUND_ROWS, video_id
order by id desc;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM