【问题标题】:find max value among different tables group by date按日期在不同表中查找最大值
【发布时间】:2013-06-26 13:07:27
【问题描述】:

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

非常感谢...

【问题讨论】:

  • 正确的答案是有一个带有日期列的表。我强烈建议您尽快放弃当前的桌子设计。
  • 非常感谢,我设计了新表,操作起来更容易了。

标签: mysql sql date max


【解决方案1】:

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

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

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

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

【讨论】:

  • 非常感谢,它们似乎是字符格式。你的陈述真的很有帮助。欣赏它。
猜你喜欢
  • 1970-01-01
  • 2022-01-03
  • 2022-01-03
  • 1970-01-01
  • 2022-08-18
  • 2021-02-28
  • 2019-06-21
  • 2020-06-20
  • 2017-09-20
相关资源
最近更新 更多