0

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

在此处输入图像描述

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

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);

非常感谢...

4

1 回答 1

1

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

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

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

正如 Bohemian 在评论中所说,这不是一个好的数据结构。您有并行表,并且将日期存储在表名和列中。您应该了解表分区。这是一种可以将不同日期存储在不同文件中的方式,但仍然让 MySQL 将它们解释为一个表。它可能会大大简化您使用这些数据的过程。

于 2013-06-26T13:23:45.880 回答