我有一個較小的 SQL Server(最大大小小于 1GB),我需要能夠對資料運行相當多的鏈式查詢。
我的資料庫看起來有點像這樣:
id | val1 | val2 | val3 | val4 | date_modified
1 | 'asd'| '1' | 'd' | 'u' | 'xx/xx/xxxx'
我真正需要從這張表中得到的資料非常復雜。對于 I 的每個唯一值,val4我需要根據該行查找最近的兩個date_modified行。有了這兩個條目(每個唯一val4值有 2 個條目),我需要在其中的所有列中搜索正則運算式,然后回傳匹配的行。
我嘗試過使用存盤程序來完成所有這些作業,但它變得非常復雜,因為我試圖以演算法的方式將查詢鏈接在一起。我不確定我的處理方式是否錯誤,或者是否更容易使用某種 java/spring 抽象層來使這更容易。我考慮過將整個資料庫讀入一個 java 集合,這樣我就可以對它應用一個演算法,但我不知道這是否是一個可行的解決方案,因為這個資料庫可以變得有多大。
樣本資料:
id val1 val4 date_modified
1 \"test\" : \"123\", \"test2\" : \"555\" 'a' now
2 \"test\" : \"123\", \"test2\" : \"555\" 'a' 2 hours ago
3 \"test\" : \"123\", \"test2\" : \"555\" 'a' 5 hours ago
4 \"test\" : \"123\", \"test2\" : \"555\" 'b' 10 hours ago
5 \"test123\" : \"123\", \"test2\" : \"555\" c' now
因此,如果我搜索“測驗”,它將回傳:
1, 2, 4, 5 因為:
1 & 2 在它們的 val1 列中包含“test”,它們是最近的兩個條目,其 value4 為“a”。4 還包含“test”,并且是 val4 'b' 和 5 中的最新版本,原因相同。
uj5u.com熱心網友回復:
您可以在 CTE 中使用 rank 并按如下方式使用 rank() 來獲取前 2 個最新值。
之后,您可以LIKE在外部查詢中使用或在 Java 中使用您認為效果最好的正則運算式。
with cte as
(
Select Id, val1,val2,val3,val4,
date_modified,
Rank() over(partition by val4
Order by date_modified desc)
as ranking
)
Select * from cte
where ranking <=2
/* Add like condition here? */
Order by id
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/449524.html
標籤:sql sql-server
上一篇:在HAVING子句中無法訪問“GROUPBY”中未使用的欄位
下一篇:SQL查詢到所需的輸出
