2014-06-13 1 views
3

나는 테이블은타임 스탬프에 하루의 마지막 항목을 선택하고 해당 값

Field     | Type    | Null | Key | Default | Extra 
----------------------+------------------+------+-----+---------+--------------- 
id     | int(10) unsigned | NO | PRI | NULL | auto_increment 
time_stamp   | varchar(30)  | NO |  | NULL | 
curr_property   | int(5) unsigned | NO |  | NULL | 
curr_property_cost | int(5) unsigned | NO |  | NULL | 
day_property   | int(S) unsigned | NO |  | NULL | 
day_property_cost  | int(5) unsigned | NO |  | NULL | 
curr_solar_generating | int(5) unsigned | NO |  | NULL | 
curr_solar_export  | int(5) unsigned | NO |  | NULL | 
day_solar_generated | int(5) unsigned | NO |  | NULL | 
day_solar_export  | int(5) unsigned | NO |  | NULL | 
curr_chanl   | int(5) unsigned | NO |  | NULL | 
curr_chan2   | int(5) unsigned | NO |  | NULL | 
curr_chan3   | int(5) unsigned | NO |  | NULL | 
day chan1    | int(5) unsigned | NO |  | NULL | 
day_chan2    | int(5) unsigned | NO |  | NULL | 
day_chan3    | int(5) unsigned | NO |  | NULL | 

가 지금은 두 시간이 7 값 사이의 마지막 항목을 선택합니다 구조를 다음과 같이 'admin_tmp'불렀다 및 7시 59분 59초 매일 (날짜 만하지 타임 스탬프) 및 해당 값

난 단지 추적 아래의 쿼리를 사용하여 가져올 수 있어요

,

쿼리

나는 이것을 달성하기 위해 조인을 사용한다는 것을 알게되었다, 그러나 다시 나는 오류없이 조인을 사용하지 수

id | time_stamp   | curr_property | day_property | mytime | mydate  
------+---------------------+---------------+--------------+----------+----------- 
1225 | 2014-06-01 07:00:04 |   1641 |  11466 | 07:00:04 | 2014-06-01 
13802 | 2014-06-03 07:00:05 |   1850 |  15452 | 07:00:05 | 2014-06-03 
7418 | 2014-06-02 07:00:05 |   1577 |  13053 | 07:00:05 | 2014-06-02 
1226 | 2014-06-01 07:00:16 |   1593 |  11471 | 07:00:16 | 2014-06-01 
13803 | 2014-06-03 07:00:17 |   1577 |  15457 | 07:00:17 | 2014-06-03 
7419 | 2014-06-02 07:00:17 |   1528 |  13058 | 07:00:17 | 2014-06-02 
1227 | 2014-06-01 07:00:28 |   1577 |  11476 | 07:00:28 | 2014-06-01 
7420 | 2014-06-02 07:00:29 |   1545 |  13063 | 07:00:29 | 2014-06-02 
13804 | 2014-06-03 07:00:29 |   1850 |  15464 | 07:00:29 | 2014-06-03 
1228 | 2014-06-01 07:00:40 |   981 |  11480 | 07:00:40 | 2014-06-01 
13805 | 2014-06-03 07:00:41 |   1561 |  15469 | 07:00:41 | 2014-06-03 
7421 | 2014-06-02 07:00:41 |   1577 |  13069 | 07:00:41 | 2014-06-02 
1229 | 2014-06-01 07:00:52 |   1206 |  11484 | 07:00:52 | 2014-06-01 
7422 | 2014-06-02 07:00:53 |   1399 |  13073 | 07:00:53 | 2014-06-02 
13806 | 2014-06-03 07:00:53 |   1545 |  15474 | 07:00:53 | 2014-06-02 

SELECT id, time_stamp , curr_property, day_property, mytime , mydate 
FROM (
SELECT 
* 
,DATE(time_stamp) AS mydate 
,TIME(time_stamp) AS mytime 
FROM admin_tmp 
) AS Result 
WHERE mytime >= '07:00:00' AND mytime <= '07:59:59' 
Order By mytime LIMIT 15; 

결과.

+0

이 힘은 you.http 도움이 될 것입니다 //stackoverflow.com/questions/23707871/how-to-select-the-latest-record-of-each-hour-in-a-day/23730316#를 23730316. 각 시간의 최신 기록이 제공됩니다. –

+0

예상되는 결과는 무엇입니까? –

+0

@AbhikChakraborty 출력에서 ​​각 날짜의 최대 시간을 알아야합니다 – user3155632

답변

2

당신은 날짜에 따라 최대 시간을 얻기 위해, 기록을 얻기 위해 두 번 한 번 한 번 같은 데이터를 선택합니다. 그런 다음 둘 모두에 가입하면 날짜별로 최대 시간 동안 만 레코드를 가져 오는 것과 같이 필터링 할 수 있습니다.

SELECT 
    rec.id, 
    rec.time_stamp, 
    rec.curr_property, 
    rec.day_property, 
    rec.mytime, 
    rec.mydate 
FROM 
(
    SELECT 
    admin_tmp.*, 
    DATE(time_stamp) AS mydate, 
    TIME(time_stamp) AS mytime 
    FROM admin_tmp 
    WHERE TIME(time_stamp) >= '07:00:00' AND TIME(time_stamp) <= '07:59:59' 
) as rec 
JOIN 
(
    SELECT 
    DATE(time_stamp) as mydate, 
    MAX(TIME(time_stamp)) as mytime 
    FROM admin_tmp 
    WHERE TIME(time_stamp) >= '07:00:00' AND TIME(time_stamp) <= '07:59:59' 
    GROUP BY DATE(time_stamp) 
) as max_times ON max_times.mydate = rec.mydate and max_times.mytime = rec.mytime 
ORDER BY rec.mytime LIMIT 15; 
+0

멍청한 짓이에요. 고맙습니다. @Thorsten Ketter – user3155632

1

이것을 시도하면 매일 최신 기록을 볼 수 있습니다.

http://sqlfiddle.com/#!2/49aff3/3

select i1.* from InverterReadings i1 
LEFT JOIN InverterReadings i2 
      on i2.myDate=i1.myDate and i1.myTime<i2.myTime 
where i2.id IS NULL; 
관련 문제