任何人都可以建议如何优化以下查询,而不在列datecol1上的条件中应用日期函数。我们已经在datecol1上有索引但由于左侧是date()
函数而没有考虑它。
SELECT DISTINCT DATE(datecol2)
FROM table1
WHERE DATE(datecol1) BETWEEN DATE(DATE_SUB(NOW(), INTERVAL 7 HOUR)) AND
DATE(DATE_SUB(NOW(), INTERVAL 1 HOUR));
感谢您的帮助!
更新: 表格包含以下行:
datecol2 datecol1
'2016-06-17 01:10:07', '2016-07-02 01:41:44'
'2016-06-20 17:18:49', '2016-07-02 01:01:16'
'2016-06-21 18:22:16', '2016-07-02 00:57:30'
'2016-06-23 16:09:21', '2016-07-02 00:01:51'
'2016-06-23 16:13:24', '2016-07-02 00:01:51'
'2016-06-23 16:14:07', '2016-07-01 23:01:51'
'2016-06-24 16:14:07', '2016-07-01 07:01:51'
'2016-06-25 16:14:07', '2016-07-01 08:11:51'
因此,我们需要挑选所有最后3行,因为它与日期(colname)匹配,即2016-07-01以及2016-07-02 查询看起来像
SELECT DISTINCT DATE(datecol2) FROM table1
WHERE DATE(datecol1) BETWEEN DATE('2016-07-01 23:00:00') AND DATE('2016-07-02 05:00:00');
答案 0 :(得分:0)
如果datecol1
具有DATETIME
类型 - 在这种情况下无需应用DATE
功能。 WHERE
子句中的所有关键argumnents都是DATETIME
值,因为DATE_SUB
还返回DATETIME
值:
SELECT distinct DATE(datecol2)
FROM table1
WHERE datecol1
BETWEEN date_sub(now(), interval 7 hour)
AND date_sub(now(), interval 1 hour);
例如,以下查询将返回1
:
select 1 from CatalogAreas
where '2016-07-02 08:00:00' between date_sub(now(), interval 7 hour) and date_sub(now(), interval 1 hour)
limit 1;