У меня есть запрос от 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 |
+----------------------------------------------+
Есть два случая, которые в основном фокусируются на одной и той же проблеме:
- Как видите, есть два случая, когда дата ввода всегда одна и та же. Однако, с моим запросом выше, я все еще получаю
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
Есть ли TAG_VALUE a VARCHAR2 или NUMBER? Это похоже на модель EAV, и если вы используете общий тип данных, ответ будет намного сложнее. –
@JonHeller TAG_Value является ЧИСЛЕННЫМ. Что вы подразумеваете под моделью EAV? – mrquad