在postgres中从小组获得las记录?

时间:2017-11-30 23:09:54

标签: sql postgresql

我有db的下一个结构,我需要只获取id的最新行,例如id 1的最大行,id 2的最大行等等,目前我有这个查询:

SELECT  max(fecha), id_transaccion, id_movimiento
FROM transaccion_movimiento 
group by (id_transaccion, id_movimiento, fecha);

稍后再适应:

LEFT JOIN (SELECT  max(fecha), id_transaccion, id_movimiento FROM transaccion_movimiento  group by (id_transaccion, id_movimiento, fecha) ORDER BY ID_TRANSACCION asc LIMIT 1)nn ON T.id_transaccion = nn.id_transaccion LEFT JOIN ctl_tipo_movimiento IM ON IM.id_tipo_movimiento = nn.id_movimiento " +

我需要帮助

Imge with commands and results

1 个答案:

答案 0 :(得分:0)

我建议你考虑改用row_number() over()。见Window Functions

SELECT
      *
FROM x
LEFT JOIN (
      SELECT
            fecha
          , id_transaccion
          , id_movimiento
          , ROW_NUMBER() OVER (PARTITION BY id_transaccion, id_movimiento
                               ORDER BY fecha DESC) AS ultima_fecha_row
      FROM transaccion_movimiento
      ) nn ON T.id_transaccion = nn.id_transaccion asn nn.ultima_fecha_row=1
LEFT JOIN ctl_tipo_movimiento im ON im.id_tipo_movimiento = nn.id_movimiento

现在虽然我认为 fecha 意味着日期对我来说没有多大意义,所以你可能需要调整这个建议。例如,我不确定"分区"中是否需要id_movimiento。或不。

          , ROW_NUMBER() OVER (PARTITION BY id_transaccion
                               ORDER BY fecha DESC) AS ultima_fecha_row