2016-12-07 16 views
0

讓我們的例子:如何使用mysql和php從子表中獲取數據的最大和最小值?

我有2個表如下

Main tables in database

子表是使用P_ID相關父表。

父表中每個案例包含一行。 子表存儲每個案例的相關操作並通過P_id相關,日期時間列記錄操作時間。

現在, 我想查詢什麼是每一種情況下的最大值,如下

Result of max table

我想GET第二件事是最大和最小的同桌每種情況下的 只能通過mysql來完成,或者我也必須使用php。

結果,我想到的是如下:

Result of max and min of each case

像這樣有表中的行1000的。我是否需要使用python或其他東西來處理這種數據。

+0

你可以在MySQL單獨做到這一點。 – Shadow

回答

0

使用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 
0

爲了您的第一件事:

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` 
相關問題