2015-10-29 136 views
0

我需要從不同日期的一堆日期中獲取MAX日期。我有一個查詢返回6個日期。我需要以某種方式獲得該查詢的最大值。這是我的作品,給我6個不同的MAX日期第一個查詢:如何從最大日期子查詢列表中選擇最大日期

SELECT 
     MAX(mi.last_updated_dts), 
     (SELECT MAX(lt.created_dts) FROM live_training as lt WHERE lt.me_id = 1156), 
     (SELECT MAX(gm.created_dts) FROM group_member as gm WHERE gm.me_id = 1156), 
     (SELECT MAX(clm.created_dts) FROM contact_list_member as clm WHERE clm.me_id = 1156), 
     (SELECT MAX(mc.created_dts) FROM member_case as mc WHERE mc.me_id = 1156), 
     (SELECT MAX(mcc.created_dts) FROM member_case_comment as mcc INNER JOIN member_case as mc ON (mcc.member_case_id = mc.id) WHERE mc.me_id = 1156) 
    FROM 
     member_info AS mi 
    WHERE mi.id = 1276 

這裏是什麼樣的,我試圖做的,但它不工作:

SELECT MAX(
      SELECT 
        MAX(mi.last_updated_dts), 
        (SELECT MAX(lt.created_dts) FROM live_training as lt WHERE lt.me_id = 1156), 
        (SELECT MAX(gm.created_dts) FROM group_member as gm WHERE gm.me_id = 1156), 
        (SELECT MAX(clm.created_dts) FROM contact_list_member as clm WHERE clm.me_id = 1156), 
        (SELECT MAX(mc.created_dts) FROM member_case as mc WHERE mc.me_id = 1156), 
        (SELECT MAX(mcc.created_dts) FROM member_case_comment as mcc INNER JOIN member_case as mc ON (mcc.member_case_id = mc.id) WHERE mc.me_id =1156) 
      FROM 
        member_info AS mi 
      WHERE mi.id = 1276 
     ) as theMostMaxDate 

我不不知道應該從何聲明中輸入什麼,或者甚至可能。謝謝你的幫助!

回答

2

一個解決方案可能是重寫查詢以在派生表中使用union all並從中獲取最大值,儘管這隻會得到一個日期而沒有關於其來源的信息(但如果這很重要,您可以添加一列與一個文字值指示查詢什麼給你最大日期):

SELECT MAX(max_date) 
FROM (
    SELECT MAX(mi.last_updated_dts) AS max_date FROM member_info AS mi WHERE mi.id = 1276 
    UNION ALL 
    SELECT MAX(lt.created_dts) FROM live_training as lt WHERE lt.me_id = 1156 
    UNION ALL 
    SELECT MAX(gm.created_dts) FROM group_member as gm WHERE gm.me_id = 1156 
    UNION ALL 
    SELECT MAX(clm.created_dts) FROM contact_list_member as clm WHERE clm.me_id = 1156 
    UNION ALL 
    SELECT MAX(mc.created_dts) FROM member_case as mc WHERE mc.me_id = 1156 
    UNION ALL 
    SELECT MAX(mcc.created_dts) FROM member_case_comment as mcc 
    INNER JOIN member_case as mc ON (mcc.member_case_id = mc.id) WHERE mc.me_id = 1156 
) t 
+0

@tylerBrignone這將是更好地提出新問題,而不是添加到當前的新問題會得到更多的曝光正改變現有問題某種程度上使答案無效(在某種意義上)。我很高興看到後續行動。 – jpw

0

MAX()是一組由功能和工作在一個單一的字段或表達式。使用greates()函數可以在多個字段或表達式中工作。

SELECT 
    GREATEST(MAX(mi.last_updated_dts), 
    (SELECT MAX(lt.created_dts) FROM live_training as lt WHERE lt.me_id = 1156), 
    (SELECT MAX(gm.created_dts) FROM group_member as gm WHERE gm.me_id = 1156), 
    (SELECT MAX(clm.created_dts) FROM contact_list_member as clm WHERE clm.me_id = 1156), 
    (SELECT MAX(mc.created_dts) FROM member_case as mc WHERE mc.me_id = 1156), 
    (SELECT MAX(mcc.created_dts) FROM member_case_comment as mcc INNER JOIN member_case as mc ON (mcc.member_case_id = mc.id) WHERE mc.me_id = 1156)) as maxdate 
FROM 
    member_info AS mi 
WHERE mi.id = 1276 

另一種解決方案是將獨立查詢與union結合起來,並且可以使用max()從結果集中選擇總體最大值。

0

@jpw對此問題有正確的解決方案。我只是想指出的是,你可以不用子查詢:

SELECT MAX(mi.last_updated_dts) AS max_date FROM member_info AS mi WHERE mi.id = 1276 
UNION ALL 
SELECT MAX(lt.created_dts) FROM live_training as lt WHERE lt.me_id = 1156 
UNION ALL 
SELECT MAX(gm.created_dts) FROM group_member as gm WHERE gm.me_id = 1156 
UNION ALL 
SELECT MAX(clm.created_dts) FROM contact_list_member as clm WHERE clm.me_id = 1156 
UNION ALL 
SELECT MAX(mc.created_dts) FROM member_case as mc WHERE mc.me_id = 1156 
UNION ALL 
SELECT MAX(mcc.created_dts) FROM member_case_comment as mcc 
INNER JOIN member_case as mc ON (mcc.member_case_id = mc.id) WHERE mc.me_id = 1156 
ORDER BY max_date DESC 
LIMIT 1; 
相關問題