mysql - 如何创建 MySQL 查询以在单独的表中返回早于预定义日期的记录
问题描述
我正在为 MySQL 表创建维护查询,我需要根据表中的日期字段将记录标记为可删除(将列值从 0 更新为 1)。
很简单,但我遇到的问题是,将记录标记为可删除的标准因帐户 ID(acc_id 列)而异。
例如,该表将包含来自多个帐户的记录(acc_id 字段),并且有一个单独的帐户表,其中包含一个列(retention_age),我需要使用该列来确定是否可以将记录标记为可删除。
例子:
SELECT *
FROM files
WHERE DATE(file_downloaded_date) < DATE_SUB(CURDATE(), INTERVAL 30 DAY)
AND deleted = 0;
例如,在要更新记录的表中,acc_id = 1 可能有 100 条记录,acc_id = 2 有 250 条记录等...... acc_id 1 设置为将记录标记为 14 天后可删除,acc_id 2 是设置为在 30 天后标记为可删除。
我试图弄清楚我是否可以创建一个 SQL 查询来在一个查询中完成这一切,或者我是否需要为每个帐户创建一个单独的查询。
我在想,如果有办法用每条记录的 acc_id 的retention_age 值替换 INTERNAL 30 DAY 中的“30”,那将是最好的方法,但我不知道该怎么做,或者如果这甚至会起作用。
任何建议将不胜感激。
解决方案
您应该能够使用 aLEFT JOIN
来获得相应的帐户并将其retention_age
用作INTERVAL
:
DELETE files FROM files
LEFT JOIN accounts ON accounts.id = files.acc_id
WHERE
DATE(file_downloaded_date) < DATE_SUB(CURDATE(), INTERVAL accounts.retention_age DAY)
AND deleted = 0
推荐阅读
- c# - 如何将 @Html.TextBox 的值存储到变量中
- premake - 如何为 Premake 中的特定文件添加标志配置?
- python - 如何通过将 csv 上传到数据存储区来更新数据存储区中的某些实体
- php - 在 Laravel 5.4 上过滤分页列表
- python - python - 在python中的PyArrow和C ++中的Arrow之间进行接口时如何将PyArrow表转换为Arrow表
- jquery - 如何知道 html 元素被 javascript(Jquery) 修改?
- dictionary - 我将如何通过值键关系(Java)在这两个 arrayLists 之间遍历?
- javascript - 链接字体、css和JavaScript文件的最佳顺序是什么
- javascript - 如何在部署后立即在客户端浏览器上自动加载更改?
- php - 如何在视频上添加水印?