2016-11-16 101 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

相关问题