2015-10-29 135 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; 
相关问题