JOIN结果的顺序

时间:2014-01-28 14:50:51

标签: postgresql join

我有这个查询

SELECT orden.id,
array_to_string(array_agg(observaciones.fecha_hora),'<br>') as observaciones
FROM orden
LEFT JOIN observacion observaciones ON observaciones.orden_id = orden.id
GROUP BY orden.id

它正在返回:

orden.id = 5878  
observaciones
2012-03-15 01:39:11
2012-03-15 01:40:28
2012-03-15 01:40:42
2012-03-15 09:09:08
2012-03-15 09:11:10
2012-03-15 01:18:34
2012-03-15 01:19:27
2012-03-15 09:17:01
2012-03-15 09:17:36
2012-03-15 03:16:58
2012-03-15 01:21:01
2012-03-15 03:17:06
2012-03-15 03:17:26
2012-03-15 01:27:33
2012-03-15 03:18:05
2012-03-15 03:24:56
2012-03-15 03:49:24
2012-03-15 01:27:43
2012-03-15 01:38:30
2012-03-15 06:30:13

问题是,如何按DESC顺序获取这些日期时间 我不能做一个子查询,因为我正在优化一个旧查询,我真的需要一个JOIN。 我正在使用postgresql。

3 个答案:

答案 0 :(得分:0)

我对PostgreSQL一无所知,但在SQL中你可以把它扔进临时表,然后命令临时表。

SELECT  orden.id
,       array_to_string(array_agg(observaciones.fecha_hora),'<br>') as observaciones
INTO #orden
FROM orden
LEFT JOIN observacion observaciones 
    ON observaciones.orden_id = orden.id
GROUP BY orden.id

SELECT id
,       observaciones
FROM #orden
ORDER BY observaciones

DROP TABLE #orden

答案 1 :(得分:0)

如果您只想按日期desc对结果行进行排序,只需添加ORDER BY“field”DESC:

SELECT orden.id,
array_to_string(array_agg(observaciones.fecha_hora),'<br>') as observaciones
FROM orden
LEFT JOIN observacion observaciones ON observaciones.orden_id = orden.id
GROUP BY orden.id
ORDER BY observaciones.fecha_hora DESC

答案 2 :(得分:0)

最后我这样做了......

    SELECT 
    orden.id,
    array_to_string(array_agg(observaciones.fecha_hora),'<br>') as observaciones
    FROM orden
    LEFT JOIN (
        SELECT orden_id, fecha_hora FROM observacion ORDER BY fecha_hora DESC
    ) as observaciones ON observaciones.orden_id = orden.id
    GROUP BY orden.id

感谢所有..