SQL选择每天的上一个时间戳

时间:2014-08-31 21:06:41

标签: mysql sql select group-by unix-timestamp

我正在尝试将时间戳列表减少到每天的最后一个。

我可以使用以下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行,而不是预期的 168 。我注意到返回的六行中只有一行甚至是当天的最后一个时间戳。它有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时间戳转换它们(或者至少将它们输出为一个)? / p>

感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用简单的group by

执行此操作
select max(intTimeStamp) as lasttimestamp
from TableA 
group by date(from_unixtime(intTimeStamp))
order by lasttimestamp desc;