2016-11-22 81 views
0

我試圖(我們這裏的relational_id)找到所有的單個行對每個Item_ID一個不同的或獨特的In_Column值最大的時間戳,其中Item_Table =「X」和的Timestamp這個行的最高值爲In_Column + Item_ID + Item_Table,但低於所提供的值。MySQL的每個Relational_ID選擇不同的列,其中低於X

sample_table

In_Column End_Value Item_Table Item_ID Timestamp 
---------------------------------------------------------- 
Length 3   Pipe  3  2016-07-29 09:00:00 
Length 2   Pipe  3  2016-07-30 09:00:00 
Length 5   Pipe  4  2016-07-30 11:00:00 
Kg  12  Pipe  3  2016-07-29 09:00:00 
Kg  25  Steel  1  2016-07-29 09:00:00 

理想的結果,如果提供的日期是當前時間和Item_Table = '管'

In_Column End_Value Item_Table Item_ID Timestamp 
---------------------------------------------------------- 
Length 2   Pipe  3  2016-07-30 09:00:00 
Length 5   Pipe  4  2016-07-30 11:00:00 
Kg  12  Pipe  3  2016-07-29 09:00:00 

的順序並不重要,因爲我將鑄造回報(這將是很大的,表中有很多匹配的行)放入一個數組中。

對不起,我沒有提供一個示例查詢,我玩過一些連接的LEFT JOIN,但是它們的執行時間可以理解很長,結果集並沒有像預期的那樣具體。

回答

0

這應該爲你工作

SELECT 
    `t1`.* 
FROM 
    `your_table` `t1` 
     INNER JOIN 
      (
       SELECT 
        `Item_ID`, 
        `In_Column`, 
        MAX(`Timestamp`) AS `latest` 
       FROM 
        `your_table` 
       WHERE 
        `Item_Table` = 'Pipe' AND 
        `Timestamp` < 'Supplied Time' 
       GROUP BY 
        `Item_ID`, `In_Column`) `t2` 
     ON 
      `t1`.`Item_ID` = `t2`.`Item_ID` AND 
      `t1`.`In_Column` = `t2`.`In_Column` AND 
      `t1`.`Timestamp` = `t2`.`latest` 
WHERE 
    `Item_Table` = 'Pipe' 

只是正確的表名替換your_table

+0

這裏是SQL小提琴示例http://sqlfiddle.com/#!9/36a2ab/1/0 – sajushko

+0

謝謝,這正是我之後的事情!爲即時回覆,美觀的佈局以及爲其製作小提琴的額外努力而歡呼。所以這是用別名t1,t2創建'your_table'的臨時表,然後使用它們來匹配和繪製數據? – Elohim

+0

就是這樣的。當你從select中使用inner join時,mysql會創建一些臨時表。 – sajushko