2016-12-14 57 views
0

我讀了很多線程,但沒有得到正確的解決方案,我的問題。這相當於該ThreadSQL - 左連接和WHERE語句顯示第一行

我有一個查詢,它收集數據並寫入每個shell腳本到一個CSV文件:

SELECT 
    '"Dose History ID"' = d.dhs_id, 
    '"TxFieldPoint ID"' = tp.tfp_id, 
    '"TxFieldPointHistory ID"' = tph.tph_id, 
    ... 

FROM txfield t 
LEFT JOIN txfielpoint tp ON t.fld_id = tp.fld_id 
LEFT JOIN txfieldpoint_hst tph ON fh.fhs_id = tph.fhs_id 
... 

WHERE d.dhs_id NOT IN ('1000', '10000') 
    AND ... 
ORDER BY d.datetime,...; 

這是基於有大量的表格和機器值的非常大的數據庫。我選擇了我感興趣的列,並通過內置的表ID將它們鏈接起來。現在我必須減少結果,我得到許多具有相同值的行,並且只更改ID。我只需要一個(第一)行的「tph.tph_id」與機制像

WHERE "Rownumber" is 1 

或類似的東西。到目前爲止,我無法實現適當的子查詢或使用SQL函數ROW_NUMBER()。您的幫助將非常感激。結果看起來像這樣,根據最後一個ID,我只需要一行這個數字(所有的ID都不是嚴格連續的)。

A01";261511;2843119;714255;3634457; 
A01";261511;2843113;714256;3634457; 
A01";261511;2843113;714257;3634457; 
A02";261512;2843120;714258;3634464; 
A02";261512;2843114;714259;3634464; 
.... 
+0

嘗試'集團BY'而用於聚集[除tph.tph_id所有字段]'GROUP BY'應該給你你想要的結果 –

+0

也許我錯過了一些東西,但是在你選擇的開始處有一個致命的錯誤。你不能給一個字符串賦值(即'''劑量歷史ID''= d.dhs_id'是非法的)。其次,你正在使用一個別名'd'(就像'WHERE d.dhs_id NOT IN('1000','10000')'),我沒有看到這個別名被定義在哪裏。 – FDavidov

+0

@FDavidov d(和其他)的別名在後面的SELECT部分​​中。我試過 – Nurito

回答

0

我認爲「GROUP BY」可能適合您的需求。

可以組行與一組列的值相同成單行