SQL 查询相同 vod_name 和相差一年内 vod_year 的数据
如何修改SQL语句:查询mac_vod表中的所有vod_name相同,vod_year相差不大于1的数据内容
原始 SQL 语句:
SELECT vod_id, type_id, vod_name, vod_year, vod_time
FROM mac_vod
WHERE (vod_name, vod_year) IN (
SELECT vod_name, vod_year
FROM mac_vod
WHERE type_id IN (1,6,7,8,9,10,11,12,20,21,22,23,24,25,26)
GROUP BY vod_name, vod_year
HAVING COUNT(*) > 1
)
ORDER BY vod_name ASC, vod_time DESC
LIMIT 30
修改后的 SQL 语句:
SELECT vod_id, type_id, vod_name, vod_year, vod_time
FROM mac_vod v1
WHERE EXISTS (
SELECT 1
FROM mac_vod v2
WHERE v1.vod_name = v2.vod_name
AND ABS(v1.vod_year - v2.vod_year) <= 1
)
ORDER BY vod_name ASC, vod_time DESC
LIMIT 30
这个修改后的 SQL 语句使用了 EXISTS 子查询来筛选出所有满足条件的数据。在子查询中,我们对 mac_vod 表进行自连接,比较两个记录的 vod_name 和 vod_year 之间的差值,如果差值小于等于 1,则返回结果。最后,我们按照 vod_name 进行升序排序,如果 vod_name 相同,则按照 vod_time 进行降序排序。最终,我们限制结果返回最多 30 条记录。
原文地址: https://www.cveoy.top/t/topic/qnMb 著作权归作者所有。请勿转载和采集!