我必須從oracle 11
db查詢。 使用下面的查詢,我從我的數據庫中獲得所有最近的TAG_VALUE, TAG_DESC, INSERTION_DATE and PROJECT_ID
。僅查詢最早可能日期的數字值
SELECT *
FROM (SELECT t.tag_value,
t.tag_desc,
u.update_as_of AS INSERTION_DATE,
p.proj_id AS PROJECT_ID,
Row_number()
over(
PARTITION BY p.proj_id
ORDER BY u.update_as_of DESC) RN
FROM project p
join update u
ON p.project_id = u.project_id
join tag t
ON t.tag_id = u.tag_id
WHERE t.tag_desc LIKE 'Equity%')
WHERE rn = 1;
不過,我來到了防空火炮的情況下,我的要求(不按日期排序的話)的回答可以看起來像:
+----------------------------------------------+
| TAG_VALUE TAG_DESC INSERTION_DATE PROJECT_ID |
+----------------------------------------------+
| null Equity 14-DEC-14 1 |
| 0 Equity 14-DEC-14 1 |
| 312 Equity 14-DEC-14 1 |
| 23343 Equity 17-DEC-11 5 |
| 1263 Equity 16-DEC-11 5 |
| null Equity 22-JÄN-14 2 |
| null Equity 11-JÄN-14 2 |
| null Equity 25-SEPT-13 2 |
| 0 Equity 20-SEPT-13 2 |
| 1234 Equity 19-SEPT-13 2 |
| 13415 Equity 18-SEPT-13 2 |
| 99999 Equity 16-OCT-10 9 |
+----------------------------------------------+
我Result Set
應該看起來像:
+----------------------------------------------+
| TAG_VALUE TAG_DESC INSERTION_DATE PROJECT_ID |
+----------------------------------------------+
| 312 Equity 14-DEC-14 1 |
| 23343 Equity 17-DEC-11 5 |
| 1234 Equity 19-SEPT-13 2 |
| 99999 Equity 16-OCT-10 9 |
+----------------------------------------------+
有兩種情況,基本上都集中在同一個問題上:
- 正如你所看到的,有兩種情況,當插入日期總是相同時
project_id = 1
。但是,通過我的查詢,我仍然得到null
,因爲ordering
。我怎樣才能得到312
而沒有得到null
或0
值? - 如果
projectID = 2
有不同的插入日期,並且較早的日期有TAG_VALUE
null
元素。但是,我想要tagValue
的| 1234 Equity 19-SEPT-13 2 |
,因爲它是最新的價值?
如何,我可以基本忽略所有null
也0
值的值,只需要數字,這是大於0
值與最早的日期?
我真的很感謝你的回答!
您能否正確地處理您的查詢: FROM project p FROM updated u – Rusty 2014-10-09 09:12:53
TAG_VALUE是VARCHAR2還是NUMBER?這看起來像一個EAV模型,如果你使用的是通用數據類型,答案會更加複雜。 – 2014-10-09 22:45:25
@JonHeller TAG_Value是NUMERIC。 EAV模型意味着什麼? – mrquad 2014-10-10 09:06:55