在联接中从分组依据中排除一列

时间:2019-03-25 20:07:27

标签: mysql greatest-n-per-group

我有一个汇总查询:

SELECT SERIAL, pos_id, MIN(fecha)
FROM pvs 
WHERE pos_id = 50
GROUP BY SERIAL, pos_id
ORDER BY MIN(fecha) DESC;

First query

,它很有效地获取了我需要的信息,除了一条数据是另一张表中该序列号的ID。当我加入时会发生这种情况。

SELECT d.id, p.SERIAL, p.pos_id, MIN(fecha)
FROM pvs p
JOIN devices d
ON d.SERIAL=p.SERIAL
WHERE p.pos_id = 50
GROUP BY p.SERIAL, p.pos_id, d.id
ORDER BY MIN(fecha) DESC;

Second query, lots of duplicates

我想显示另一张表中每一行的ID,但不能从组中排除ID(我只需要该序列号的第一个日期和第一个出现)。即我想要第一个查询,但要添加另一个表中的ID。

1 个答案:

答案 0 :(得分:1)

您可以加入子查询

    function my_url($offer) {
$dd = url_title($offer->number." ".$offer->number,"-",true);
$ddd= rawurldecode($ddd)
return site_url("siteweb\view".$offer->number."/".htmlspecialchars($ddd));

或者,如果您只需要一个ID,请应用聚集功能

select  d.id, t.SERIAL, t.pos_id, t.min_fecha
from  devices d 
INNER JOIN ( 
    SELECT SERIAL, pos_id, MIN(fecha) min_fecha
    FROM pvs 
    WHERE pos_id = 50
    GROUP BY SERIAL, pos_id
    ORDER BY MIN(fecha) DESC;

    ) t on t.SERIAL = d.SERIAL
ORDER BY min_fecha DESC