Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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 内部联接返回正确的最大日期,但不返回同一行中的其他字段_Mysql_Sql_Join_Max - Fatal编程技术网

Mysql 内部联接返回正确的最大日期,但不返回同一行中的其他字段

Mysql 内部联接返回正确的最大日期,但不返回同一行中的其他字段,mysql,sql,join,max,Mysql,Sql,Join,Max,我有以下db表(简化) 我的查询旨在获取给定仪表的最新合同结束日期,并将其与供应商一起返回。我已经编写了查询并返回了正确的合同结束日期,但供应商从上一份合同返回,因此返回的数据是两行,而不是一行 e、 我明白了 2014-01-10|Southern Electric 。。不对 我的问题是: SELECT statistics_meter.mpan_number AS mpanNumber, MAX(statistics_contract.contract_end_date)

我有以下db表(简化)

我的查询旨在获取给定仪表的最新合同结束日期,并将其与供应商一起返回。我已经编写了查询并返回了正确的合同结束日期,但供应商从上一份合同返回,因此返回的数据是两行,而不是一行

e、 我明白了

2014-01-10|Southern Electric
。。不对

我的问题是:

SELECT
    statistics_meter.mpan_number AS mpanNumber,
    MAX(statistics_contract.contract_end_date) AS contractEndDate,
    statistics_contract.supplier AS supplierName
FROM statistics_contract
    INNER JOIN statistics_meter 
        ON statistics_meter.id=statistics_contract.meter_id
GROUP BY statistics_contract.meter_id

提前感谢您的帮助

它不能返回同一行中的其他字段,因为同一行中没有。聚合的概念是从任意行数的值生成单个值。如果表中有1200行满足查询中表示的其他条件,那么对于任何“其他”字段,您希望查询返回1200个其他不同值中的哪一个

要从其中一行获取其他数据,必须准确指定所需的特定行

SELECT m.mpan_number mpanNumber,
     c.contract_end_date, c.supplier supplierName
FROM statistics_contract c
   JOIN statistics_meter m 
    ON m.id=c.meter_id
where contract_end_date = 
      (Select Max(contract_end_date)
       From statistics_contract
       Where meter_id = c.meter_id)

。。。如果在
统计数据\u合同
中有多行具有相同的
仪表id
和最后一个
合同结束日期
,则即使这样也可能不起作用

您可以使用此SQL查询

SELECT
    statistics_meter.mpan_number AS mpanNumber,
    s.contract_end_date AS contractEndDate,
    s.supplier AS supplierName
FROM statistics_contract AS s
    INNER JOIN statistics_meter 
        ON statistics_meter.id=s.meter_id
WHERE s.contract_end_date = (
    SELECT MAX(contract_end_date) 
    FROM statistics_contract AS sc 
    WHERE sc.meter_id=s.meter_id
)

当您不了解数据库如何工作时,就会发生这种情况。阅读文档()中的MySQL
groupby
extensions。
group by
中未包含的列的值是任意的。请使用带有子查询筛选器的联接。我很欣赏@GordonLinoff链接,但您是否同意,如果每个人都知道文档的内容,就不需要stackoverflow?@newvision。MySQL的扩展列特性是非标准SQL。如果人们使用的东西与标准相去甚远,那么是的,我认为他们应该知道自己在做什么。我不知道为什么要教这个结构。
SELECT
    statistics_meter.mpan_number AS mpanNumber,
    s.contract_end_date AS contractEndDate,
    s.supplier AS supplierName
FROM statistics_contract AS s
    INNER JOIN statistics_meter 
        ON statistics_meter.id=s.meter_id
WHERE s.contract_end_date = (
    SELECT MAX(contract_end_date) 
    FROM statistics_contract AS sc 
    WHERE sc.meter_id=s.meter_id
)