按日期查找不同表之间的最大值

时间:2013-06-26 13:07:28

标签: mysql sql date max

我有4个不同日期的表,表格如下:

enter image description here

我要做的是根据小时在所有四天中找到每个service_name,function_name的最大tps。例如,在我发布的图中,第一个raw中的service_name(BatchItemService)在日期13-06-12 01中具有(getItemAvailability)作为function_name。我在同一小时的所有其他3个表中具有相同function_name的相同service_name“ 01“但不同的日子,如第13,14,15天。我想找到这个service_name的最大tps,function_name在所有四天中设置为小时“01”。 我试过这个,但它给我的结果不正确。

SELECT 

    t.service_name,
    t.function_name,
t.date,
    max(t.tps)
FROM
    (SELECT 
         service_name, function_name, date, tps
    FROM
        trans_per_hr_2013_06_12

UNION ALL 
    SELECT 
         service_name, function_name, date,tps
    FROM
        trans_per_hr_2013_06_13
GROUP BY  service_name,function_name,date
UNION ALL 
    SELECT 
         service_name, function_name,date, tps
    FROM
        trans_per_hr_2013_06_14

UNION ALL 
    SELECT 
         service_name, function_name, date, tps
    FROM
        trans_per_hr_2013_06_15

UNION ALL 
    SELECT 
         service_name, function_name,date, tps
    FROM
        trans_per_hr_2013_06_16

    ) t
GROUP BY  t.service_name,t.function_name,hour(t.Date);

非常感谢...

1 个答案:

答案 0 :(得分:1)

您的查询看起来应该返回您想要的内容。

一个可能的问题是日期列的类型。如输出中所示,这看起来可能存储为字符串而不是日期。如果是这样,以下内容适用于group by语句(假设格式如下所示:DD-MM-YY H)。

GROUP BY  t.service_name,t.function_name, right(t.Date, 2);

波西米亚在评论中说,这不是一个好的数据结构。您有并行表,您将日期存储在表名和列中。您应该了解表分区。这是一种可以在不同文件中存储不同日期的方法,但仍然可以将MySQL解释为一个表。它可能会极大地简化您使用此数据的过程。