在我的mysql数据库中,我有一个表,让我们调用状态。该表格有一个creative_id,每当广告素材的状态发生变化时,我们都会记录一个新行,并将旧版本的is_current更改为0,将新版本更改为1。
我想查询状态更改为“已审核”后有多少状态更改超过90天。所以下面的查询是我开始的,但问题是,如果在不到90天的时间内发生了变化,但是在多次更改中,最终结果大于90天。这是我到目前为止的查询:
const arr = [1, 2, 3]
const squares = {
num: function(arr) {
return arr.map((x) => {
return (x * x) + this.add()
})
},
add: () => {
return 1
}
}
console.log(squares.num(arr))
示例:
SELECT COUNT(*) FROM creative_status_version csv
INNER JOIN creative_status_version csv2
ON csv.creative_id = csv2.creative_id
AND DATEDIFF(day, csv2.last_modified_time, csv.last_modified_time) > 90
WHERE csv.audit_status = 'audited'
AND csv.is_current = 0
AND csv2.audit_status = 'rejected'
AND csv2.is_current = 1
因为唯一的结果来自审计 - >其他内容...在90天的时间跨度之后是id = 1的广告素材,结果将是:
|creative_id| audit_status| is_current| last_modified_time |
|1 |audited | 0 | 1-1-2017 |
|1 |rejecected | 1 | 5-1-2017 |
|2 |audited | 0 | 1-1-2017 |
|2 |pending | 0 | 2-1-2017 |
|2 |rejected | 1 | 5-1-2017 |
|3 |audited | 1 | 1-1-2017 |
|4 |rejected | 1 | 5-1-2017 |
答案 0 :(得分:0)
我遵循的逻辑是:
计算时差是否> 90天
Select count(*) from
(select csv.creative_id, csv.last_modified_time
FROM creative_status_version csv
INNER JOIN creative_status_version csv2 ON csv.creative_id = csv2.creative_id
WHERE csv.audit_status = 'audited'
AND csv2.audit_status <> 'audited'
AND csv2.last_modified_time>csv.last_modified_time
GROUP BY csv.creative_id, csv.last_modified_time
HAVING TIMESTAMPDIFF(day, csv.last_modified_time, min(csv2.last_modified_time)) > 90) t
如果你有一个以上的审计记录percreative id,并且你只想计算最新的和非审计的那个之间的差异,那么你需要有一个子查询代替creative_status_version csv
返回审核状态的每个广告素材ID的最大日期。