2016-10-31 37 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您使用組由沒有聚集功能..這可能會導致不一致的結果..

相關問題