У меня есть таблица оракула, которая имеет эти два столбца, CreateDate и FlagId, среди прочих. FlagID - целочисленный столбец. Я должен сначала извлечь все строки с FlagID в (3000, 3001, 3002). Я сделаю инструкцию select, где FlagID в (3000, 3001, 3002) порядке CreateDate, FlagID desc. Теперь у меня будет множество наборов из этих трех строк. Я должен выбрать последний набор значений. Однако это не всегда может быть три. Это могут быть (3001, 3002), (3000, 3001, 3002) и так далее. В этом случае я должен выбрать первые две строки, опускающие последующие множества. Если в верхних строках есть все три флага, я должен получить три строки. Я создал указатель оракула и получил все строки, выбранные этими значениями, по порядку CreateDate. Но я не уверен, как выбрать верхний набор строк, создав подмножество из курсора.Как создать подмножество курсора оракула
0
A
ответ
0
Это возвратит все строки новее, чем предпоследняя дата для FlagId 3000.
Oracle:
SELECT CreateDate, FlagId
FROM tab
WHERE FlagId in (3000, 3001, 3002) and
CreateDate > (SELECT MIN (CreateDate)
FROM (SELECT CreateDate
FROM ( SELECT CreateDate
FROM tab
WHERE FlagId = 3000
ORDER BY CreateDate DESC)
WHERE ROWNUM < 3));
MySql:
select CreateDate, FlagId from t1
where FlagId in (3000, 3001, 3002) and
CreateDate >
(select min(CreateDate) from (
select CreateDate from t1
where FlagId = 3000
order by CreateDate desc
limit 2) sub);
0
Здесь я использовал иерархический запрос, чтобы сделать это. Первая часть перечисляет данные по порядку: createdate desc, flagid
. Вторая часть занимает первые три строки в этом порядке. Суть заключается в соединении по предложению: prior fid < fid and rn = prior rn + 1
.
with enum as (
select createdate cd, flagid fid, row_number()
over (order by createdate desc, flagid) rn
from t where flagid in (3000, 3001, 3002))
select cd, fid from enum where rn <= 3
connect by prior fid < fid and rn = prior rn + 1
start with rn = 1
вход и выход Пример:
CREATEDATE FLAGID CD FID
------------------- ------ ------------------- ----
2015-03-24 11:48:29 3000 2015-03-25 12:24:52 3000
2015-03-24 11:48:29 3001 2015-03-25 11:49:13 3001
2015-03-24 11:48:29 3002 2015-03-25 11:49:13 3002
2015-03-25 11:48:45 3000
2015-03-25 11:48:45 3001
2015-03-25 11:49:13 3001
2015-03-25 11:49:13 3002
2015-03-25 12:24:52 3000
Смежные вопросы
- 1. цикл внутри курсора оракула
- 2. Как создать подмножество таблицы
- 3. Как создать подмножество массива?
- 4. Выполнение процедуры оракула с помощью курсора
- 5. ResultSet.next() слишком медленный для курсора рефлекса оракула
- 6. Практические примеры использования явного курсора оракула
- 7. Создать все подмножество
- 8. Создать подмножество Dataframe
- 9. Как создать форму оракула в построителе формы оракула?
- 10. оракула создать триггер
- 11. как создать рабочее пространство в оракула ХЕ
- 12. как создать строку подключения для оракула C#
- 13. Как создать процедуры оракула, но не хранить
- 14. Создать подмножество массива в php
- 15. Как создать подмножество документа с помощью lxml?
- 16. Как создать подмножество шрифтов в .NET?
- 17. создать петлю курсора JS
- 18. динамический запрос в процедуре оракула с помощью курсора
- 19. Как создать элемент отслеживания курсора SVG?
- 20. Как создать эффект наведения курсора qt?
- 21. Как создать пользовательские изображения курсора в java
- 22. Как создать объект курсора из объекта Bitmap?
- 23. Как создать фигуры вокруг курсора мыши?
- 24. Создать триггер с помощью курсора
- 25. создать временную таблицу из курсора
- 26. создать последовательность в оракула для каждого блока
- 27. Не удалось создать DSN для оракула?
- 28. Создать подмножество dataframe без использования для цикла
- 29. Неправильное количество измерений в R - Создать подмножество
- 30. создать базу данных оракула и таблицы
Если каждый набор будет иметь одну дату, то ваше решение будет действительно очень элегантно. Однако у них будут разные даты. – user466663
Итак, вам нужно последнее из каждого из трех значений? Как они могут быть набором, если они не используют одну и ту же дату? –
Это немного сложнее. Сначала мне нужно получить последние 3000, а затем все 3001 0r 3002 до того, как встретится еще 3000, упорядочите по дате. – user466663