2016-12-14 117 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”可能适合您的需求。

可以组行与一组列的值相同成单行