Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如果最近一行超过2周,则返回数据_Mysql_Sql - Fatal编程技术网

Mysql 如果最近一行超过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

我有一个查询,它为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 = '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,以便任何人都可以针对它进行测试。