Ann*_*lee 6 sql oracle oracle11g
我必须从oracle 11db 查询.通过下面的查询,我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;
Run Code Online (Sandbox Code Playgroud)
但是,我遇到的情况是,我的请求的答案(没有按日期排序)看起来像这样:
+----------------------------------------------+
| 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 |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
我的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 |
+----------------------------------------------+
Run Code Online (Sandbox Code Playgroud)
有两种情况,主要关注同一问题:
project_id = 1即插入日期始终相同.但是,根据我上面的查询,我仍然会null因为这个而回来ordering.如何在312没有获得null或0价值的情况下获得号码?projectID = 2有不同的插入日期,并且较早的日期具有TAG_VALUE null元素.不过,我想拥有tagValue的| 1234 Equity 19-SEPT-13 2 |,因为它是最新的价值?怎么样,可我基本上无视一切null,也0值的值,只需要数字,它大于0与最早的日期值?
我非常感谢你的回答!
考虑到您的分组发生在 INSERTION_DATE DESC 的 PROJECT_ID 和正 TAG_VALUE 内,我调整了分析函数以实现结果。这可能不是一个强大的解决方案,但肯定会对您有所帮助。
\n\n数据设置:
\n\nCREATE TABLE Table1\n ("TAG_VALUE" varchar2(5), "TAG_DESC" varchar2(6), "INSERTION_DATE" varchar2(10), "PROJECT_ID" int)\n;\n\nINSERT ALL \n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (NULL, \'Equity\', \'14-DEC-14\', 1)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'0\', \'Equity\', \'14-DEC-14\', 1)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'312\', \'Equity\', \'14-DEC-14\', 1)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'23343\', \'Equity\', \'17-DEC-11\', 5)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'1263\', \'Equity\', \'16-DEC-11\', 5)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (NULL, \'Equity\', \'22-J\xc3\x84N-14\', 2)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (NULL, \'Equity\', \'11-J\xc3\x84N-14\', 2)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (NULL, \'Equity\', \'25-SEPT-13\', 2)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'0\', \'Equity\', \'20-SEPT-13\', 2)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'1234\', \'Equity\', \'19-SEPT-13\', 2)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'13415\', \'Equity\', \'18-SEPT-13\', 2)\n INTO Table1 ("TAG_VALUE", "TAG_DESC", "INSERTION_DATE", "PROJECT_ID")\n VALUES (\'99999\', \'Equity\', \'16-OCT-10\', 9)\nSELECT * FROM dual\n;\nRun Code Online (Sandbox Code Playgroud)\n\n询问:
\n\nSELECT tag_value, \n tag_desc, \n insertion_date, \n project_id \nFROM (SELECT tag_value, \n tag_desc, \n insertion_date, \n project_id, \n Last_value(Decode(tag_value, 0, NULL, \n tag_value) ignore nulls) \n over ( \n PARTITION BY project_id \n ORDER BY insertion_date ROWS BETWEEN unbounded preceding AND \n unbounded \n following ) new_tag_value \n FROM table1) \nWHERE tag_value = new_tag_value; \nRun Code Online (Sandbox Code Playgroud)\n\n结果:
\n\nTAG_VALUE TAG_DESC INSERTION_DATE PROJECT_ID\n312 Equity 14-DEC-14 1\n1234 Equity 19-SEPT-13 2\n23343 Equity 17-DEC-11 5\n99999 Equity 16-OCT-10 9\nRun Code Online (Sandbox Code Playgroud)\n\n这是小提琴
\n