MySQL根据组中另一个字段(不在表中)的最大值按字段分组

MySQL根据组中另一个字段(不在表中)的最大值按字段分组,mysql,group-by,subquery,aggregate-functions,having,Mysql,Group By,Subquery,Aggregate Functions,Having,考虑下表: un_id avl_id avl_date avl_status 1738 6377398 2011-03-10 unavailable 1738 6377399 2011-03-11 unavailable 1738 6377400 2011-03-12 unavailable 1738 6719067 2011-03-12 unavailable 1738 6719351 2011-03-12 available 173

考虑下表:


un_id   avl_id  avl_date    avl_status
1738    6377398 2011-03-10  unavailable 
1738    6377399 2011-03-11  unavailable 
1738    6377400 2011-03-12  unavailable 
1738    6719067 2011-03-12  unavailable
1738    6719351 2011-03-12  available
1738    6377401 2011-03-13  unavailable 
1738    6377402 2011-03-14  unavailable 
1738    6377403 2011-03-15  unavailable 
1738    6377404 2011-03-16  available
1738    6719068 2011-03-16  unavailable 
1738    6719352 2011-03-16  available
从以下查询中获取:


SELECT 
    tbl_unit.un_id,
    tbl_availability.avl_id,
    tbl_availability.avl_date, 
    tbl_availability.avl_status
FROM
    tbl_unit
INNER JOIN 
    tbl_availability ON 
    tbl_unit.un_id = tbl_availability.un_id
WHERE
    tbl_availability.avl_active='True' AND
    tbl_unit.un_active='True' AND
    tbl_availability.avl_date >= '2011-03-10' AND
    tbl_availability.avl_date
我曾尝试添加GROUPBY和HAVING子句以及各种子查询,但每次都失败了

感谢您的帮助!: -亚当。

试试这个:

SELECT
     un_id,avl_status
    FROM
    ( 
    SELECT 
        tbl_unit.un_id,
        tbl_availability.avl_id,
        tbl_availability.avl_date, 
        tbl_availability.avl_status
    FROM
        tbl_unit
    INNER JOIN 
        tbl_availability ON 
        tbl_unit.un_id = tbl_availability.un_id
    WHERE
        tbl_availability.avl_active='True' AND
        tbl_unit.un_active='True' AND
        tbl_availability.avl_date >= '2011-03-10' AND
        tbl_availability.avl_date 
    )
    GROUP BY 
     un_id,avl_status
    HAVING
     avl_id=max(avl_id) 

看起来不错,但不是很好:1054-on子句中的未知列“T.avl_id”仍然不起作用,我还尝试了T.max_avl_id=tbl_availability.avl_id更新为T.max_avl_id=tbl_availability.avl_idOK,分析这一点-您的解决方案从整个表中为给定的un_id提供MAXavl_id。。。然而,我要寻找的是MAXavl_id,只有当该un_id的avl_日期相同时,它才是un_id。因此,对于某个日期的任何un_id,返回该日期MAXavl_id的avl_状态。如果我将子查询更改为此,并仅运行子查询,它将为我提供每个单元在每个日期的max_avl_id列表。。。现在我如何将其加入到tbl_可用性中?按un_id、avl_日期从tbl_可用性组中选择un_id、maxavl_id作为max_avl_id、avl_日期
SELECT 
    tbl_unit.un_id,
    tbl_availability.avl_id,
    tbl_availability.avl_date, 
    tbl_availability.avl_status
FROM
    tbl_unit
INNER JOIN 
    (select un_id, max(avl_id) as max_avl_id from tbl_availability group by un_id) T
    on tbl_unit.un_id = T.un_id
INNER JOIN tbl_availability ON 
    T.max_avl_id = tbl_availability.avl_id
WHERE
    tbl_availability.avl_active='True' AND
    tbl_unit.un_active='True' AND
    tbl_availability.avl_date >= '2011-03-10' AND
    tbl_availability.avl_date
SELECT
     un_id,avl_status
    FROM
    ( 
    SELECT 
        tbl_unit.un_id,
        tbl_availability.avl_id,
        tbl_availability.avl_date, 
        tbl_availability.avl_status
    FROM
        tbl_unit
    INNER JOIN 
        tbl_availability ON 
        tbl_unit.un_id = tbl_availability.un_id
    WHERE
        tbl_availability.avl_active='True' AND
        tbl_unit.un_active='True' AND
        tbl_availability.avl_date >= '2011-03-10' AND
        tbl_availability.avl_date 
    )
    GROUP BY 
     un_id,avl_status
    HAVING
     avl_id=max(avl_id)