Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何从max date子查询列表中选择max date_Mysql_Sql_Date - Fatal编程技术网

Mysql 如何从max date子查询列表中选择max date

Mysql 如何从max date子查询列表中选择max date,mysql,sql,date,Mysql,Sql,Date,我需要从不同表格中的一系列不同日期中获取最大日期。我有一个返回6个日期的查询。我需要以某种方式最大限度地理解这个问题。这是我的第一个查询,它提供了6个不同的最长日期: 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

我需要从不同表格中的一系列不同日期中获取最大日期。我有一个返回6个日期的查询。我需要以某种方式最大限度地理解这个问题。这是我的第一个查询,它提供了6个不同的最长日期:

    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

我不知道应该在from语句中添加什么,或者这是否可能。谢谢你的帮助

一种解决方案可能是重写查询,在派生表中使用
union all
,并从中获取最大值,尽管这只会获取日期,而不会获取有关其来源的信息(但如果这很重要,则可以添加一列,用文字值指示查询给您的最大日期):

Max()是一个按函数分组的函数,用于单个字段或表达式。改为使用跨多个字段或表达式工作的函数

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()从结果集中选择总体最大值。

@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;

@tylerBrignone最好是问一个新问题,而不是添加到当前问题中,因为新问题会得到更多的曝光,再加上更改现有问题会使答案无效(在某种意义上)。我很乐意看到后续的情况。
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;