我有一個oracle表,其中有這兩列,CreateDate和FlagId等等。 FlagID是一個整數列。我必須首先在(3000,3001,3002)中提取FlagID中的所有行。我將通過CreateDate,FlagID desc來執行select(3000,3001,3002)中的FlagID。現在,我將擁有這三列中的許多組。我必須選擇最新的一組值。但是,它可能不總是三個。它可以是(3001,3002),(3000,3001,3002)等等。在這種情況下,我必須選擇省略後續設置的前兩行。如果頂行有三個標誌,那麼我必須檢索三行。我已經創建了一個Oracle遊標,並通過CreateDate按照這些值順序選擇了所有行。但我不確定如何通過從光標創建子集來選擇最上面的一組行。如何創建一個oracle遊標的子集
0
A
回答
0
這將返回所有行新的比對FlagId 3000
甲骨文倒數第二日:
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. 批量收集Oracle遊標的列的子集
- 2. 卡住創建一個骰子游戲
- 3. 創建多個遊標
- 4. 在Oracle中創建遊標之前創建表
- 5. PL/SQL - 如何創建一個條件遊標?
- 6. 如何在oracle中創建一個動態where子句
- 7. 如何在oracle中爲重複值創建一個標誌
- 8. 如何在Swift中創建一個安全的Array子集?
- 9. 如何在kdb中創建遊標?
- 10. 在VBA中創建一個子集
- 11. 如何創建一個返回集合的XAML標記擴展
- 12. 如何在oracle中創建子分區?
- 13. Oracle遊標
- 14. 如何使用循環創建數據集的多個子集?
- 15. 如何創建一個數據集市
- 16. 如何從defrecord創建一個集合?
- 17. 如何創建一個包含集合
- 18. 在創建過程後返回oracle中ref遊標的結果
- 19. 創建一個dbf,它是另一個dbf的子集(按標準)?
- 20. Git:如何創建一個也包含子模塊的標籤?
- 21. 創建一個數據集,它是SSRS中另一個數據集的子集
- 22. 創建一個表,有一個在Oracle
- 23. 創建一個遊標適配器顯示比光標本身
- 24. 試圖創建一個簡單的基於骰子的遊戲
- 25. 在Java中創建一個集合的子集
- 26. Android:我如何創建一個盒子?
- 27. 如何創建一個Doctrine子查詢?
- 28. AHBottomNavigation,如何創建一個子片段?
- 29. 如何創建一個子NSManagedObjectContext?
- 30. 如何創建一個圈子?
如果每個組都會有一個日期,那麼您的解決方案將是非常非常優雅。不過他們會有不同的日期。 – user466663 2015-03-25 03:49:35
所以你需要三個值中的每一個的最新值?如果他們不分享同一日期,他們怎麼能成爲一個集合? – 2015-03-25 03:56:11
它稍微複雜一點。首先,我必須獲得最新的3000,然後在遇到另一個3000之前獲取3001或3002,按日期排序。 – user466663 2015-03-25 04:10:56