添加最新结果的MySQL查询

添加最新结果的MySQL查询,mysql,max,Mysql,Max,我有两个MySQL表,希望从表2中选择值最高的结果,并将它们附加到表1中 表1包含ID、MSISDN(14位数字) 表2包含ID、MSISDN、字段2和日期 我想返回表1中所有MSISDN的列表,以及table2.field2和table2.date的结果,其中table2.date是匹配MSISDN的最大值 我该怎么做?我知道我需要使用MAX,但我不确定如何构造子查询来为table2.field添加正确的结果。通常,您可以通过 创建包含每个id的最长日期的子选择 将此子选择与原始表合并以返回

我有两个MySQL表,希望从表2中选择值最高的结果,并将它们附加到表1中

表1包含ID、MSISDN(14位数字)

表2包含ID、MSISDN、字段2和日期

我想返回表1中所有MSISDN的列表,以及table2.field2和table2.date的结果,其中table2.date是匹配MSISDN的最大值


我该怎么做?我知道我需要使用MAX,但我不确定如何构造子查询来为table2.field添加正确的结果。

通常,您可以通过

  • 创建包含每个id的最长日期的子选择
  • 将此子选择与原始表合并以返回附加列
请注意,如果有两条相同的(MSISDN,date)记录,它们都将被返回

SQL Server

SELECT  t1.MSISDN
        , t2.field2
        , t2.date
FROM    Table1 AS t1
        INNER JOIN Table2 AS t2 ON t2.MSISDN = t1.MSISDN
        INNER JOIN (
          SELECT  MAX(date) AS date, MSISDN
          FROM    Table2
          GROUP BY
                  MSISDN
        ) t2max ON t2max.MSISDN = t2.MSISDN
                   AND t2max.date = t2.date

通常,您可以通过

  • 创建包含每个id的最长日期的子选择
  • 将此子选择与原始表合并以返回附加列
请注意,如果有两条相同的(MSISDN,date)记录,它们都将被返回

SQL Server

SELECT  t1.MSISDN
        , t2.field2
        , t2.date
FROM    Table1 AS t1
        INNER JOIN Table2 AS t2 ON t2.MSISDN = t1.MSISDN
        INNER JOIN (
          SELECT  MAX(date) AS date, MSISDN
          FROM    Table2
          GROUP BY
                  MSISDN
        ) t2max ON t2max.MSISDN = t2.MSISDN
                   AND t2max.date = t2.date

谢谢你。你是说
MAX(date)作为date
还是
MAX(MSISDN)作为MSISDN
?我需要每个MSISDN的最新日期,但需要该日期和MSISDN的匹配字段2。@MatthewPort-它应该是
MAX(date)
。我已经纠正了我的错误。太好了,谢谢。我的查询需要几个小时才能运行(表2是9700万行),因此等待结果是否符合预期需要需要很长时间。即使有9700万行,正确的索引也不需要几个小时。谢谢。你是说
MAX(date)作为date
还是
MAX(MSISDN)作为MSISDN
?我需要每个MSISDN的最新日期,但需要该日期和MSISDN的匹配字段2。@MatthewPort-它应该是
MAX(date)
。我已经纠正了我的错误。太好了,谢谢。我的查询需要数小时才能运行(表2是9700万行),因此等待结果是否符合预期需要很长时间。即使有9700万行,正确的索引也不需要数小时。