mysql - SQL 选择过去 45 天的所有数据

标签 mysql sql

我有带有日期字段 - targetDate 的“警报”表。

我想选择过去 45 天的所有数据。

我尝试了下面的代码,但它没有返回任何结果...

SELECT userID, refID, `targetDate`
FROM alerts
WHERE type = 'travelSoon'
AND DATEDIFF( CURDATE( ) , targetDate ) > 45

 id     userID  type    refID   createDate  targetDate  lastSendDate    sent    valid
1   26  travelSoon  NO  2018-05-02 13:54:25 0000-00-00  2018-05-02 00:00:00 0   1
2   26  travelSoon  NO  2018-05-02 13:55:50 2018-06-01  0000-00-00 00:00:00 0   1
3   26  travelSoon  DK  2018-05-02 13:56:12 2018-12-01  0000-00-00 00:00:00 0   1
4   26  travelSoon      2018-05-02 13:59:50 0000-00-00  0000-00-00 00:00:00 0   1
5   26  travelSoon      2018-05-02 14:00:09 2018-08-01  0000-00-00 00:00:00 0   1
6   26  travelSoon  DK  2018-05-02 14:00:48 2018-08-01  0000-00-00 00:00:00 0   1
7   26  travelSoon      2018-05-02 16:45:18 2018-05-01  0000-00-00 00:00:00 0   1
8   26  travelSoon  RO  2018-05-02 16:45:45 2018-04-01  0000-00-00 00:00:00 0   1

最佳答案

使用DATEDIFF()是一个坏主意。它阻止了使用索引的能力,并且有一个替代方案不...

SELECT *
  FROM alerts
 WHERE type = 'travelSoon'

   AND targetDate >= DATEADD(DAY, -45, GETDATE())    -- SQL Server

   AND targetDate >= CURDATE() - INTERVAL 45 DAY     -- MySQL

http://www.sqlfiddle.com/#!9/4ecdc0/6

关于mysql - SQL 选择过去 45 天的所有数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50269894/

相关文章:

sql - 唯一和主键

mysql - 更新表中的数据设置特定日期的最小计时事件

php - SQL 查询将多个值匹配到 select 语句中的一个字段

php - 垂直显示表格

mysql - 如何评估 MYSQL 表的 varchar 列中的公式

sql - 如何从表中选择具有非空值的列?

MySql 多项选择中的一行

mysql - 带有 count() 和位置的 SQL 请求

mysql - 在MySQL中左连接和创建表需要很长时间(索引完成)

php - 在 MySQL 中转换日期