2016-11-16 60 views
1

n_station查詢 - 從其他表的最新日期和鏈接數據

code_stas nom_station 
1   StationA 
2   StationB 
3   StationC 

val_horaire

code_mesure date_val_hor h_01 h_02 h_03 
1   14/11/2016  23  29  32 
1   15/11/2016  45  47  35 
2   14/11/2016  12  15  13 
2   15/11/2016  21  23  19 
3   14/11/2016  74  75  79 

我想獲得表的最新(日期)行val_horaire和加入收藏夾n_station

結果

cod_stas nom_station date_val_hor h_01 h_02 h_03 
1   StationA 15/11/2016  45  47  35 
2   StationB 15/11/2016  21  23  19 
3   StationC 14/11/2016  74  75  79 

我該如何做到這一點?下面的查詢不起作用

SELECT st.code_stas, st.nom_station, max(vh.date_val_hor), vh.h_01, vh.h_02, vh.h_03 
FROM n_station st 
INNER JOIN val_horaire vh 
ON st.code_stas = vh.code_mesure 
GROUP BY st.code_stas, st.nom_station, vh.h_01, vh.h_02, vh.h_03 

這將多次告訴我一個站

+0

將max函數表達式設置爲vh.h_01,vh.h_02,vh.h_03,並刪除group by中的列。它工作嗎? – Ming

+0

@ Mannix.Zhu但我不想要最大h_01,h_02,... +錯誤'無效的參數數量' – Weedoze

+0

明白了。我誤解了你想做的事。檢查我的答案。 – Ming

回答

1

解決方案一:

SELECT 
    st.code_stas, 
    st.nom_station, 
    MAX(vh.date_val_hor) KEEP(DENSE_RANK FIRST ORDER BY st.nom_station DESC) AS date_val_hor, 
    MAX(vh.h_01) KEEP(DENSE_RANK FIRST ORDER BY st.nom_station DESC) AS h_01, 
    MAX(vh.h_02) KEEP(DENSE_RANK FIRST ORDER BY st.nom_station DESC) AS h_02, 
    MAX(vh.h_03) KEEP(DENSE_RANK FIRST ORDER BY st.nom_station DESC) AS h_03 
FROM 
    n_station st, 
    val_horaire vh 
WHERE 
    st.code_stas = vh.code_mesure 
GROUP BY st.code_stas, st.nom_station 

解決方案2號:

SELECT code_stas, nom_station, h_01, h_02, h_03 FROM (
    SELECT 
     st.code_stas, 
     st.nom_station, 
     vh.date_val_hor, 
     vh.h_01, 
     vh.h_02, 
     vh.h_03, 
     ROW_NUMBER() OVER(PARTITION BY st.code_stas, st.nom_station ORDER BY vh.date_val_hor DESC) AS DISTINCT_FLG 
    FROM 
     n_station st, 
     val_horaire vh 
    WHERE 
     st.code_stas = vh.code_mesure 
) 
WHERE DISTINCT_FLG = 1 
+0

第二個解決方案似乎工作 – Weedoze

+0

如何添加一個'INNER JOIN'與另一個表?另一個表包含'code'和'groupname'。我只需要帶特定組名稱的站點 – Weedoze

+0

[st.code_stas = vh.code_mesure]等於SQL中的[INNER JOIN]。只是內部加入你的新表。但是如果新表的主鍵不是[code],那麼也許你應該改變[GROUP BY]中的列。 – Ming

0

是這樣的(?):

SELECT st.code_stas, st.nom_station, zzz.MAX_date_val_hor, vh.h_01, vh.h_02, vh.h_03 
FROM (SELECT code_mesure, MAX(date_val_hor) AS MAX_date_val_hor FROM val_horaire GROUP BY code_mesure) ZZZ 
INNER JOIN 
n_station st ON st.code_stas=zzz.code_mesure 
INNER JOIN val_horaire vh 
ON st.code_stas = vh.code_mesure 
GROUP BY st.code_stas, st.nom_station, zzz.MAX_date_val_hor, vh.h_01, vh.h_02, vh.h_03; 
+0

我有多次同一個站 – Weedoze

相關問題