Mysql 如果最近一行超过2周,则返回数据
我有一个查询,它为s.work_id=14681列查找最新的一行,并且只显示一行 我的问题是,我如何确保最近的一行,例如超过2周?work_status表中的每一行都添加了一个date_,其格式为datetime。如果最近一行已超过2周,则应显示该行 我当前的查询:Mysql 如果最近一行超过2周,则返回数据,mysql,sql,Mysql,Sql,我有一个查询,它为s.work_id=14681列查找最新的一行,并且只显示一行 我的问题是,我如何确保最近的一行,例如超过2周?work_status表中的每一行都添加了一个date_,其格式为datetime。如果最近一行已超过2周,则应显示该行 我当前的查询: SELECT s.* FROM work_status s LEFT JOIN work w ON (s.work_id = w.id) WHERE s.work_id = 14681 AND w.investigation
SELECT s.*
FROM work_status s
LEFT JOIN work w ON (s.work_id = w.id)
WHERE s.work_id = 14681
AND w.investigation = '1'
AND w.deleted = '0'
AND w.investigation_winner = '0'
AND w.investigation_validated = '1'
AND w.work_denied = '0'
ORDER BY s.date_added DESC
LIMIT 1
示例数据:
现在查询显示第一行,但是正如前面所说的,它不应该返回任何内容,因为最新的一行还没有超过2周。
您可以在WHERE子句中添加一个条件,用于检查添加的日期是否为两周或更久
SELECT s.*
FROM work_status s
LEFT JOIN work w
ON s.work_id = w.id
WHERE s.work_id = 14681 AND
w.investigation = '1' AND
w.deleted = '0' AND
w.investigation_winner = '0' AND
w.investigation_validated = '1' AND
w.work_denied = '0' AND
s.date_added < DATE_SUB(CURDATE(), INTERVAL 2 WEEK) AND
(SELECT MAX(date_added) FROM work_status) < DATE_SUB(CURDATE(), INTERVAL 2 WEEK)
ORDER BY s.date_added DESC
LIMIT 1
基于@Tim的解决方案,您可以做什么:
SELECT s.*
FROM work_status s
LEFT JOIN work w
ON s.work_id = w.id
WHERE s.work_id = 14681 AND
w.investigation = '1' AND
w.deleted = '0' AND
w.investigation_winner = '0' AND
w.investigation_validated = '1' AND
w.work_denied = '0' AND
CONVERT(VARCHAR(10), s.date_added, 120) <= DATEADD(WEEK, -2, CONVERT(VARCHAR(10), GETDATE(), 120) AND
(SELECT MAX(CONVERT(VARCHAR(10), date_added, 120)) FROM work_status) <= DATEADD(WEEK, -2, CONVERT(VARCHAR(10), GETDATE(), 120)
ORDER BY s.date_added DESC
LIMIT 1
我发现,时间戳给出的结果往往不准确,这就是我使用日期转换的原因。DATEADD函数使您可以轻松地选择要查找的时间间隔
我还添加了一个“您想要左联接还是内部联接?”您已经得到了内部联接结果,因为WHERE子句中有这些右侧表条件。添加一些示例表数据和预期结果。以及格式良好的文本。您应该在此处添加一个工作提琴,以便您的问题是可复制的,而当前不是。这不符合我设置的条件。您编写的查询现在将返回id为5583的行。但是,它不应该返回任何内容,正如我所说,id 5628是最新的一行,日期不超过2周@我不同意。如果没有超过2周的记录,我的查询将不会返回任何内容。我在WHERE子句中添加了另一个条件,以验证添加的最新日期是否也小于2周,以便返回任何记录。请尝试这个。测试代码-现在它不会返回任何东西。但是有一个错误:我将日期时间从2017-01-04 10:50:01更新到2016-11-30 10:50:01,已经超过2周了。它仍然没有返回任何内容,但应该返回。然后,您的查询逻辑出现问题。我在这里什么也做不了。您应该在您的问题中创建一个有效的SQL FIDLE,以便任何人都可以针对它进行测试。