2014-01-28 214 views
0

我有這個疑問訂購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。

+0

'ORDER BY date_column' at your end of your query – ClydeFrog

回答

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 

感謝所有..

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 
+0

我無法使用它,因爲表「觀察」有2 .500.000行...我需要將時間從40分鐘縮短到不到2分鐘。 – user2336714

0

如果你只是想按日期倒序結果行,只需添加ORDER BY 「場」 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 
+0

也許我沒有解釋清楚......我只需要訂購加入結果。 – user2336714