【问题标题】:How to get the max and min of a data from child table with mysql and php?如何使用mysql和php从子表中获取数据的最大值和最小值?
【发布时间】:2016-12-07 06:30:30
【问题描述】:

举个例子:

我有 2 个如下表

子表使用 P_Id 与父表相关。

父表包含每个案例的一行。 子表存储每个案例的动作并通过P_id关联,日期时间列记录动作的时间。

现在, 我想查询每种情况的最大值是多少,如下

我想得到的第二件事是同一张表中每个案例的最大值和最小值 可以只用 mysql 完成还是我也必须使用 php。

我期望的结果如下:

像这样,表中有 1000 行。我需要使用python或其他东西来处理这种数据吗?

【问题讨论】:

  • 你可以单独在mysql中做到这一点。

标签: php mysql


【解决方案1】:

使用 max() 和 min() 聚合函数和 max 检查它是否与 min 相同,如果它们相同则返回 null:

select data, min(sub_data), if(min(sub_data)=max(sub_data), null, max(sub_data)
from parent p
inner join child c on p.id=c.p_id

【讨论】:

    【解决方案2】:

    第一件事:

    SELECT
        p.data, c.sub_data, c.`datetime`
    FROM parent p
    JOIN child c
    ON p.id = c.pid
    JOIN (
        SELECT max(`datetime`) as `datetime`, pid
        FROM child
        GROUP BY pid
    ) c1
    on p.id = c1.pid AND c.`datetime` = c1.`datetime`;
    

    第二件事是:

    SELECT
        p.data,
        cmin.sub_data as Min(sub_data),
        case when cmin.sub_data = cmax.sub_data then null else cmax.sub_data end as Min(sub_data)
    FROM parent p
    JOIN (
        SELECT max(`datetime`) as `maxdatetime`, min(`datetime`) as `mindatetime`, pid
        FROM child
        GROUP BY pid
    ) c
    on p.id = c1.pid
    JOIN child cmax
    ON p.id = cmax.pid AND c.`maxdatetime` = cmax.`datetime`
    JOIN child cmin
    ON p.id = cmin.pid AND c.`mindatetime` = cmin.`datetime`
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-19
      • 2016-04-14
      • 2011-08-16
      • 2022-11-25
      • 2016-04-16
      • 2021-07-20
      • 1970-01-01
      相关资源
      最近更新 更多