2014-08-31 4 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 %를 건너 뛰고 있지만 이유는 확실하지 않습니다. 내가 첫 번째 쿼리 같이 매일에서 단지 마지막 타임 스탬프를 검색 할 수있는 방법

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 

:

1409343661 
1409170501 
1406060101 
1401221701 
1400271301 
1400012101 

가 모두 출력을 EXPLAIN :

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

는 출력 , 유닉스 타임 스탬프에서 그것들을 변환 할 필요는 없다.

감사합니다.

+0

두 쿼리는 나에게 동일하게 보인다. –

+0

제 사과 - 두 번째 검색어를 업데이트했습니다. – David

+0

. . MySQL은 정수를 날짜로 변환 할 때 매우 이상한 일을합니다. 'from_UnixTime()'이 필요합니다. –

답변

1

당신은 간단한 group by으로이 작업을 수행 할 수 있습니다 질문에

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

완벽하게 작동하며 훨씬 간단합니다. 내가 제공 한 정보가 주어지면 두 번째 쿼리에서 설명한 이상한 행동을 유발할 수있는 것이 있습니까? – David

관련 문제