如何修改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 条记录。

SQL 查询相同 vod_name 和相差一年内 vod_year 的数据

原文地址: https://www.cveoy.top/t/topic/qnMb 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录