SQL - 获取日期范围内的记录,包括当天记录

时间:2017-01-28 11:33:52

标签: php mysql sql sql-server

我正在努力解决这个问题(希望如此)。我有一个在线日志,我每天都会查看。每天都有一些我必须检查的日志,因此我构建了一个简单的日期过滤器来筛选主页上每天的日志。

现在,当第一次加载主页面时(意味着,使用默认的过滤条件),我希望页面显示最近DAY文件的所有日志。因此,如果今天是本月的第10个月,并且最近的案例是在8日提交的,那么我想从8日查询所有案例。

如果另一方面有人已经为第10个提交了一个日志文件,那么我想显示10日的所有记录。

现在的问题是查询确实准确地识别了最后一条记录的日期,但截止时间似乎是午夜或00:01,这意味着它不会显示在一分钟后那天提交的任何日志文件过了午夜!因此,如果我想查看今天的案例,我只会看到在00:00到00:01之间提交的案例,这使整个过滤器无用。

查询

$sql = "SELECT *
FROM qci_dmlog_data
WHERE Incident_Date IN (
    SELECT MAX( Incident_Date )
    FROM qci_dmlog_data
    WHERE Holidex = '".$_SESSION['Holidex']."'
)
GROUP BY LogID ORDER BY Date DESC";

总结一下,如何在不关心提交时间的情况下过滤最近一天的记录?

谢谢!

2 个答案:

答案 0 :(得分:2)

您应该查看事件日期的日期部分,以获取最近日期的所有记录。

SELECT *
FROM qci_dmlog_data
WHERE DATE(Incident_Date) IN (
    SELECT MAX(DATE(Incident_Date))
    FROM qci_dmlog_data
    WHERE Holidex = '".$_SESSION['Holidex']."'
)

答案 1 :(得分:0)

我认为除了仅使用“日期”的Holidex部分之外,您还需要将date上的子查询关联起来:

SELECT d.*
FROM qci_dmlog_data d
WHERE d.Holidex = '".$_SESSION['Holidex']."' AND
      DATE(d.Incident_Date) = (SELECT MAX(DATE(d2.Incident_Date))
                               FROM qci_dmlog_data d2
                               WHERE d2.Holidex = d.Holidex
                              );

这假定“最近的日期”是每Holidex