給出如下所示的兩個表,我需要檢索每個站,從VAL_MINUTES
表的最新值ORACLE - 加入定義表數據表
N_STATION
| CODE_STAS | NOM_STATION | RIVIERE_BASSIN | LAMBERT_X | LAMBERT_Y |
|-----------|-------------|----------------|-----------|-----------|
| 5634 | StationA | RiverA | 50 | 60 |
| 2113 | StationB | RiverB | 55 | 95 |
VAL_MINUTES
| CODE_MESURE | DATE_VAL | M_05 | M_10 | M_15 | M_20 | M_25 | M_30 |
|-------------|------------|------|------|------|------|------|------|
| 563484 | 22/11/2016 | 0.02 | 0.35 | 0.48 | 0.2 | 0.65 | 0.45 |
| 563484 | 23/11/2016 | 1.2 | 0.9 | 1.15 | 0.84 | 0.89 | 1.02 |
| 563484 | 23/11/2016 | 1.2 | 0.9 | 1.15 | 0.84 | 0.89 | 1.02 |
| 211374 | 22/11/2016 | 0.03 | 0.1 | 0.24 | 0.21 | 0.18 | 0.19 |
RESULT EX PECTED
| CODE_STAS | DATE_VAL | M_05 | M_10 | M_15 | M_20 | M_25 | M_30 | NOM_STATION | RIVIERE_BASSIN | LAMBERT_X | LAMBERT_Y |
|-----------|------------|------|------|------|------|------|------|-------------|----------------|-----------|-----------|
| 5634 | 23/11/2016 | 1.2 | 0.9 | 1.15 | 0.84 | 0.89 | 1.02 | StationA | RiverA | 50 | 60 |
| 2113 | 22/11/2016 | 0.03 | 0.1 | 0.24 | 0.21 | 0.18 | 0.19 | StationB | RiverB | 55 | 95 |
注
SUBSTR(code_mesure,1,4) = code_stas
有可能具有相同的日期多次。我們應該使用
order by date_val desc
並採取第一個正如你可以看到與
code_mesure 563484
有相同的行2次。這是一個可能的情況。最新的(如上所示)將被使用。
我嘗試下面的查詢
SELECT *
FROM (SELECT code_mesure ,
date_val ,
m_05 ,
m_10 ,
m_15 ,
m_20 ,
m_25 ,
m_30 ,
RANK() OVER (PARTITION BY code_mesure ORDER BY date_val DESC) AS rnk
FROM VAL_MINUTES
) x
INNER JOIN N_STATION st ON SUBSTR(x.code_mesure, 1, 4) = st.CODE_STAS
WHERE x.rnk = 1
,但我得到的倍數次同臺,因爲一個站都有不同的code_mesure列表
|CODE_STAS |CODE_MESURE |
|----------|---------------------|
| 1021|102148, 102159,102132|
我怎樣才能得到上面的預期結果?
嘗試通過SUBSTR使用'分區(x.code_mesure,1,4),而不是'在排名功能,應該做的訣竅 –
@EmilHolub我仍然有多個相同的站 – Weedoze
然後最近的日期不是唯一的 - 你需要指定在這種情況下你的查詢做什麼 - 要麼添加另一列您的訂購或其他條件 –