我有兩個表,一個是項目目錄,另一個包含這些項目的歷史記錄。MYSQL,返回單行JOIN中的第一行和最後一行
我想返回與項目表連接的時間段內最早和最近的歷史記錄行的值,使每個項目包含這兩個提到的值的一行。
表結構如下:
items
-----
item_id, item_title
hist
-------
hist_id, hist_item_id (corresponds to items.item_id), hist_value, hist_time (stores Unix timestamp)
我已經創建了一個SQL搗鼓一些示例數據,以幫助你,http://www.sqlfiddle.com/#!2/c78363/3
作爲一個最終的結果,我想看到這樣返回的行,這用我的小提琴示例數據將是1420291000和1420294000之間的時間段:
items.item_id items.item_title history_earliest history_latest
1 ABC 1 5
2 XYZ 1 9
目前我運行一個查詢對項目返回我所有的項目,然後遍歷PHP中的結果,然後運行兩個查詢給我最早的價值,然後另一個最新的價值,所以我相信有很大的效率節省,但我沒有一條線索從哪裏開始!
在此先感謝
這不會實現期望的輸出。我試圖實現的是在定義的時間段內爲項目中的每一行獲取一行返回的兩個hist_value。上面給出的只是給了我最早的時間戳和最新的時間戳。 – user887515
調整您的查詢,這給出了所需的輸出。然而,我不熟悉MIN和MAX - 我認爲這樣做是爲了返回hist_value的最低值和返回結果中hist_value的最高值,或者這只是基於結果的順序?最新值可能低於最早值。這產生正確的輸出。 SELECT item_id,item_title,MIN(hist_value),MAX(hist_value)FROM(items JOIN hist ON items.item_id = hist.hist_item_id)WHERE hist.hist_time> = 1420291000 AND hist.hist_time <= 1420294000 GROUP BY item_id – user887515
@ user887515'MIN (hist_value)'返回'hist_value'字段中的最小值;它與'hist_time'字段無關。所以它不會產生你需要的結果,除非這些值總是在時間上不降低。 – abl