2014-08-31 79 views
1

我想將時間戳列表只減少到每天的最後一個時間戳。SQL選擇每一天的最後一個時間戳

我可以使用下面的SQL來拉我正在尋找的時間戳,但我也將它們轉換爲格式化的日期,我不想這樣做。

select 
    from_unixtime(intTimeStamp) as day 
from 
    (
     select distinct intTimeStamp from TableA order by intTimeStamp desc 
    ) as t2 
group by 
    date(day) 
order by 
    intTimeStamp desc 

這是輸出:

2014-08-29 13:21:01 
2014-08-28 13:21:01 
2014-08-27 13:21:01 
2014-08-26 13:21:01 
2014-08-25 13:21:21 
2014-08-22 10:11:01 
2014-08-21 13:21:01 
2014-08-20 13:21:01 
[remaining omitted] 

這是預期,但我需要在原來的unixtime格式。

但是,簡單地刪除from_unixtime()函數會產生非常奇怪的行爲。它只返回6行,而不是預期的。我注意到,返回的六行中只有一行甚至是當天的最後一個時間戳。它有95%的時間可用時間戳,但我不確定爲什麼。

select 
    intTimeStamp as day 
from 
    (
     select distinct intTimeStamp from TableA order by intTimeStamp desc 
    ) as t2 
group by 
    date(intTimeStamp) 
order by 
    intTimeStamp desc 

這是輸出:

1409343661 
1409170501 
1406060101 
1401221701 
1400271301 
1400012101 

兩個explain輸出:

1 PRIMARY <derived2> ALL     13338 Using temporary; Using filesort 
2 DERIVED TableA range  PRIMARY 4  10 Using index for group-by; Using temporary; Using filesort 

如何從每天只檢索最後的時間戳,作爲第一個查詢,但不必將它們從一個unix時間戳(或至少讓它們輸出爲一個)?

謝謝。

+0

的問題兩個查詢看起來與我。 – 2014-08-31 21:23:52

+0

我的歉意 - 我已經更新了第二個查詢。 – David 2014-08-31 21:26:02

+0

。 。將整數轉換爲日期時,MySQL會做很奇怪的事情。你需要'from_UnixTime()'。 – 2014-09-01 01:33:49

回答

1

你可以用一個簡單的group by做到這一點:

select max(intTimeStamp) as lasttimestamp 
from TableA 
group by date(from_unixtime(intTimeStamp)) 
order by lasttimestamp desc; 
+0

這是完美的,更簡單。 鑑於我提供的信息,有什麼突出給你,會導致我在第二個查詢中描述的奇怪行爲? – David 2014-08-31 21:20:27

相關問題