2015-04-16 29 views
1

我已經在PostgreSQL以下查詢:SQL-Get和替換查詢的字段的最小值

SELECT mq.nombre,sa.nombre,COUNT(DISTINCT(ae.numero_serie)),SUM(im.fin-im.inicio),MIN(pz.fecha_inicio) 
FROM item_metraje AS im LEFT JOIN articulo_especificado AS ae ON (im.id_articulo_especificado = ae.id) 
      LEFT JOIN articulo AS a ON (ae.id_articulo = a.id) 
      LEFT JOIN serie_articulo AS sa ON (a.id_serie_articulo = sa.id) 
      LEFT JOIN reporte_perforacion AS rp ON (rp.id = im.id_reporte_perforacion) 
      LEFT JOIN pozo AS pz ON (pz.id=rp.id_pozo) LEFT JOIN proyecto AS p ON (p.id=pz.id_proyecto) 
      LEFT JOIN maquina_perforacion AS mq ON (mq.id = pz.id_maquina) 
WHERE p.id = 2 GROUP BY mq.nombre,sa.nombre 

,其結果是:

enter image description here

但是我希望把最低日期有場「農佈雷」的相同值,例如,對於值「JM04」行三行必須有日期2015年1月25日,因爲它是三排的最小值。

對不起,我的英語和感謝所有。

回答

1

您可以使用Window functions用於此目的。 MIN(pz.fecha_inicio) over (partition by mq.nombre)
因此最終的查詢是,

SELECT z.nombre1,z.nombre2,z.count,z.sum ,MIN(z.date) over (partition by z.nombre1) from 
(SELECT mq.nombre as nombre1 ,sa.nombre as nombre2,COUNT(DISTINCT(ae.numero_serie)) as count,SUM(im.fin-im.inicio) as sum ,pz.fecha_inicio as date 
FROM item_metraje AS im LEFT JOIN articulo_especificado AS ae ON (im.id_articulo_especificado = ae.id) 
      LEFT JOIN articulo AS a ON (ae.id_articulo = a.id) 
      LEFT JOIN serie_articulo AS sa ON (a.id_serie_articulo = sa.id) 
      LEFT JOIN reporte_perforacion AS rp ON (rp.id = im.id_reporte_perforacion) 
      LEFT JOIN pozo AS pz ON (pz.id=rp.id_pozo) LEFT JOIN proyecto AS p ON (p.id=pz.id_proyecto) 
      LEFT JOIN maquina_perforacion AS mq ON (mq.id = pz.id_maquina) 
WHERE p.id = 2 GROUP BY mq.nombre,sa.nombre)z 

你可以爲你想要的窗函數內部order byhaving條款幫助下對此進行修改。
我用我自己的數據集嘗試過。希望這可以幫助。

+0

好感謝您的答覆,但我曾與你的反應,但我得到以下錯誤「SQL狀態:42803」,這意味着我必須把場「pz.fecha_inicio」在「GROUP BY」或骨料功能,如果我把「GROUP BY」的結果是不一樣的畫面,這有一個聚合函數MIN() – Ronald

+0

我發現錯誤,首先,我必須把只有場「pz.fecha_inicio」以及後來的與窗口函數「MIN(pz.fecha_inicio)OVER(PARTITION BY pz.fecha_inicio)」,但我場曾與嵌套查詢工作爲得到相同的結果是畫面和這個作品,謝謝 – Ronald