当前位置: 首页 > 面试题库 >

MySQL Select最近7天

袁琪
2023-03-14
问题内容

我在这里阅读了一些帖子,似乎没什么特别的,但是我仍然不能选择最后几天的条目。

SELECT 
    p1.kArtikel, 
    p1.cName, 
    p1.cKurzBeschreibung, 
    p1.dLetzteAktualisierung, 
    p1.dErstellt, 
    p1.cSeo,
    p2.kartikelpict,
    p2.nNr,
    p2.cPfad

FROM 
    tartikel AS p1 WHERE DATE(dErstellt) > (NOW() - INTERVAL 7 DAY)

INNER JOIN 
    tartikelpict AS p2 
    ON (p1.kArtikel = p2.kArtikel) WHERE (p2.nNr = 1)

ORDER BY 
    p1.kArtikel DESC

LIMIT
    100;', $connection);

如果我在今天和过去7天之间添加,则我的代码将不会输出任何内容。


问题答案:

WHERE子句放错了位置,它必须遵循表引用和JOIN操作。

像这样:

 FROM tartikel p1 
 JOIN tartikelpict p2 
   ON p1.kArtikel = p2.kArtikel 
  AND p2.nNr = 1
WHERE p1.dErstellt >= DATE(NOW()) - INTERVAL 7 DAY
ORDER BY p1.kArtikel DESC

编辑 (三三年后)

上面的内容基本上回答了以下问题:“我试图在查询中添加WHERE子句,但现在查询返回错误,我该如何解决?”

关于写一个检查“过去7天”日期范围的条件的问题…

这实际上取决于解释规范,表中列的数据类型是什么(DATE或DATETIME)以及可用的数据…应返回什么。

总结一下:通用方法是为日期/日期时间范围标识一个“开始”,然后为该范围标识“结束”,并在查询中引用它们。让我们考虑一些简单的事情……“昨天”的所有行。

如果我们的列是DATE类型。在将表达式合并到查询中之前,我们可以在简单的SELECT中对其进行测试

 SELECT DATE(NOW()) + INTERVAL -1 DAY

并验证返回的结果是否符合我们的预期。然后,我们可以在WHERE子句中使用相同的表达式,将其与DATE列进行比较,如下所示:

 WHERE datecol = DATE(NOW()) + INTERVAL -1 DAY

对于DATETIME或TIMESTAMP列,我们可以使用>=<不等式比较来指定范围

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -1 DAY
   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

对于“过去7天”,我们需要从现在开始知道这是否意味着返回7天…例如过去7 * 24小时,包括比较中的时间部分,…

 WHERE datetimecol >= NOW() + INTERVAL -7 DAY
   AND datetimecol <  NOW() + INTERVAL  0 DAY

最近7天,不包括今天

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -7 DAY
   AND datetimecol <  DATE(NOW()) + INTERVAL  0 DAY

或过去六整天加上今天到目前为止…

 WHERE datetimecol >= DATE(NOW()) + INTERVAL -6 DAY
   AND datetimecol <  NOW()       + INTERVAL  0 DAY

我建议测试SELECT语句右侧的表达式,我们可以使用用户定义的变量代替NOW()进行测试,而不必与NOW()返回的内容绑定在一起,因此我们可以跨周/月测试边界/年边界,等等。

SET @clock = '2017-11-17 11:47:47' ;

SELECT DATE(@clock)
     , DATE(@clock) + INTERVAL -7 DAY 
     , @clock + INTERVAL -6 DAY

一旦我们的表达式返回的值适用于特定用例的“开始”和“结束”(即“过去7天”),就可以在WHERE子句的范围比较中使用这些表达式。

(一些开发人员更喜欢使用DATE_ADDDATE_SUB函数代替+ INTERVAL val DAY/HOUR/MINUTE/MONTH/YEAR语法。

MySQL提供了一些方便的功能来处理DATE,DATETIME和TIMESTAMP数据类型… DATE,LAST_DAY,

一些开发人员更喜欢计算其他代码的开头和结尾,并在SQL查询中提供字符串文字,以便提交给数据库的查询是

  WHERE datetimecol >= '2017-11-10 00:00'
    AND datetimecol <  '2017-11-17 00:00'

这种方法也行得通。(我的偏好是使用CAST,CONVERT或+ INTERVAL技巧将这些字符串文字显式转换为DATETIME。

  WHERE datetimecol >= '2017-11-10 00:00' + INTERVAL 0 SECOND
    AND datetimecol <  '2017-11-17 00:00' + INTERVAL 0 SECOND

上述所有假设我们现在存储“日期”,在适当的日期,DATETIME和/或TIMESTAMP数据类型,而不是将它们存储在不同的格式如琴弦'dd/mm/yyyy'm/d/yyyy朱利安日期,或者偶尔不规范的格式,或者多项从纪元开始算起的秒数,此答案将需要更长的时间。



 类似资料:
  • 问题内容: 我有以下架构。 表票 在这里,我想获取最近7天中每天的每种援助的计数,在没有任何援助票的日期为“ 0”。时间戳是unix时间戳。 任何帮助都将受到高度赞赏。 问题答案: MySQL没有递归功能,因此您可以使用NUMBERS表技巧- 创建仅包含递增数字的表-使用auto_increment可以轻松做到: CREATE TABLE . ( int(10) unsigned NOT NULL

  • 我有我的发电机数据库表如下: HashKey(日期)、RangeKey(时间戳) DB存储每天的数据(哈希键)和时间戳(范围键)。 现在我想查询过去7天的数据。我可以在一次查询中做到这一点吗?还是我需要每天调用dbb 7次?数据的顺序并不重要因此,有人可以建议一个有效的查询来做到这一点。

  • 问题内容: 我正在使用SQL Server 2008。 我想编写一个查询,该查询可以让我在给定的几天内进行全部活动。具体来说,我想计算过去7天每天的总票数。 我的桌子看起来像这样: 我需要我的结果看起来像这样 我的想法是我必须做这样的事情: 该查询不起作用,因为它仅计算(几乎完全相同)同时发生的选票。当然,我只想看特定的一天。我如何做到这一点? 问题答案: 将其投射为: 您的专栏是,但您只需要其中

  • 校验者: @DataMonk2017 @Veyron C @舞空 翻译者: @那伊抹微笑 sklearn.neighbors 提供了 neighbors-based (基于邻居的) 无监督学习以及监督学习方法的功能。 无监督的最近邻是许多其它学习方法的基础,尤其是 manifold learning (流行学习) 和 spectral clustering (谱聚类)。 neighbors-bas

  • 问题内容: 对于用于记录的几个Java应用程序,我遇到以下记录问题: 我希望日志文件每天轮换,例如 但是出于数据安全的原因,我们不允许将日志文件在我公司中保留超过7天。因此,下一个下一个日志文件的生成应触发的删除。是否可以使用来配置这种行为?如果没有,您是否知道针对此类日志记录问题的另一种优雅的解决方案? 问题答案: 您可以使用单独的脚本执行家政服务,该脚本可以每天运行。像这样:

  • 问题内容: 我正在使用MYSQL,我知道有一个limit命令可以显示一定数量的结果,但是我想知道MySQL是否只能显示最近3天之类的信息。就是想。 更新: 我使用NOW()来存储时间。 问题答案: 使用三天前的日期: 查看DATE_ADD文档。 或者您可以使用: