2016-10-31 38 views
2

我需要从mdl_logstore_standard_log中选择行,条件为timecreated应在最近五天之间7.30 AM至4.30PM之间。我如何在过去5天和时间内完成组合。这是我查询选择最近五天的记录,但在特定时间之间

SELECT * FROM mdl_logstore_standard_log 
WHERE FROM_UNIXTIME(timecreated) >= DATE_SUB(CURDATE(), INTERVAL 5 DAY) 
GROUP by userid 

timecreated是unixtimestamp

回答

1

你可以这样做太

SELECT 
* 
FROM mdl_logstore_standard_log 
WHERE timecreated >= UNIX_TIMESTAMP(CURDATE() - INTERVAL 5 DAY) 
     AND ( 
      (timecreated % 86400) 
      BETWEEN UNIX_TIMESTAMP('1970-01-01 07:30') 
       AND UNIX_TIMESTAMP('1970-01-01 16:30') 
    ) 
GROUP by userid 

timecreated % 86400将返回残留在几秒钟。

如果残留物位于1970-01-01 07:301970-01-01 16:30之间,那么您的条件实际上得到满足。

注:

  • 使用GROUP BY没有聚合函数气馁。 (@scaisEdge已经表示)
  • 如果你接近这种方式,你利用从指数上 timecreated场(如果有的话)
0

PLS试试这个

SELECT * FROM mdl_logstore_standard_log 
WHERE FROM_UNIXTIME(timecreated) >= FROM_UNIXTIME(DATE_SUB(CURDATE(), INTERVAL 5 DAY)) 
GROUP by userid; 
0

你可以使用时间

SELECT * FROM mdl_logstore_standard_log 
WHERE FROM_UNIXTIME(timecreated) >= DATE_SUB(CURDATE(), INTERVAL 5 DAY) 
AND time(FROM_UNIXTIME(timecreated)) 
     between time('2016-01-01 07:30:00.0000') and time('2016-01-01 16:30:00.0000') 
GROUP by userid 

NB您使用组由没有聚集功能..这可能会导致不一致的结果..

相关问题