SELECT t.aerop_salida,
t.aerop_llegada,
t.duracion,
p.precio,
p.fecha_hora_actualizacion
FROM tramo t,
vuelo v,
tramo_precio p
WHERE ((t.aerop_salida = v.aerop_salida) AND (t.aerop_llegada = v.aerop_llegada) AND ((p.tramo_aerolinea)::text = (t.aerolinea)::text) AND (p.tramo_aerop_salida = t.aerop_salida) AND (p.tramo_aerop_llegada = t.aerop_llegada));
输出
EZE LAX 15:25:00 12399 2017-10-10 19:50:58
EZE LAX 15:25:00 11900 2017-10-17 19:51:29
EZE LAX 16:20:00 12390 2017-10-15 23:55:03
AEP IGR 02:45:00 3200 2017-10-16 10:55:27
IGR LIM 03:15:00 5600 2017-10-11 20:00:41
但是应该只输出价格为11900的EZE - LAX,因为这是当前的(2017年10月17日更新)
编辑:
我正在尝试这样的事情,但却给我语法错误:
SELECT t.aerop_salida,
t.aerop_llegada,
t.duracion,
p.precio,
p.fecha_hora_actualizacion
FROM tramo t,
vuelo v,
(select DISTINCT tp.tramo_aerolinea, tp.tramo_aerop_llegada, tp.tramo_aerop_salida FROM tramo_precio tp order by tp.fecha_hora_actualizacion desc) p
WHERE ((t.aerop_salida = v.aerop_salida) AND (t.aerop_llegada = v.aerop_llegada) AND ((p.tramo_aerolinea)::text = (t.aerolinea)::text) AND (p.tramo_aerop_salida = t.aerop_salida) AND (p.tramo_aerop_llegada = t.aerop_llegada));
答案 0 :(得分:1)
首先,从不在FROM
子句中使用逗号。 始终使用正确的,明确的JOIN
语法。毕竟这是二十一世纪。
您可以使用DISTINCT ON
:
SELECT DISTINCT ON (t.aerop_salida, t.aerop_llegada) t.aerop_salida, t.aerop_llegada, t.duracion,
p.precio, p.fecha_hora_actualizacion
FROM tramo t JOIN
vuelo v
ON t.aerop_salida = v.aerop_salida AND
t.aerop_llegada = v.aerop_llegada JOIN
tramo_precio p
ON (p.tramo_aerolinea)::text = (t.aerolinea)::text) AND
(p.tramo_aerop_salida = t.aerop_salida) AND
(p.tramo_aerop_llegada = t.aerop_llegada)
ORDER BY t.aerop_salida, t.aerop_llegada, p.fecha_hora_actualizacion DESC;
答案 1 :(得分:0)
如果col3包含日期列
select * from A
inner join
(select distinct t.col1, t. col2
from
(select col1, col2, col3
from table
grouping by col1, col2
having max(col3)
) t
)outer
on a.col1 = outer.col1