MySQL为每个Relational_ID选择不同的列,其中最大时间戳低于X.

时间:2016-11-22 19:54:50

标签: mysql distinct

我正在尝试为In_Column ='X'和{{Item_ID ='X'找到每个Item_Table(此处为relational_id)具有不同或唯一Timestamp值的所有单独行对于此不同的In_Column + Item_ID + Item_Table,行的1}}是最高的,但低于提供的值。

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 ='Pipe',那么理想的结果

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,但是它们的执行时间可以理解的很长,而且结果集并不像预期的那样具体。

1 个答案:

答案 0 :(得分: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