2014-06-13 33 views
3

我有一個表稱爲「admin_tmp」用以下結構選擇每天在一個時間戳的最後一個條目和相應的值

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,選擇最後一項:0:0和7:59:59(只有日期,而不是時間戳),每天和它對應的值

我能只獲取使用下面的查詢追蹤,

查詢

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; 

結果

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 

我才知道,我必須使用加入來實現這一點,但我又不能使用連接沒有任何錯誤。

+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; 
相關問題