[英]Converting Oracle SQL to LLBLGEN LINQ expression C#
我有 1 個表的數據庫:
APP_ID|SETTING_NAME|SETTING_VALUE|ROW_LST_UPD_TS
1 |ab1 |111 |17:32
1 |ab2 |112 |17:32
---------------------------------------
1 |ab1 |111 |14:31
1 |ab2 |112 |14:31
---------------------------------------
2 |ba1 |121 |18:44
2 |ba2 |122 |18:44
---------------------------------------
2 |ba1 |121 |15:27
2 |ba2 |122 |15:27
---------------------------------------
使用 llblgen pro 和 LinqMetaAdapter 我需要使用按 APP_ID 分組的最新 ROW_LST_UPD_TS 獲取所有記錄
我想出了 oracle 查詢:
SELECT distinct
configurationLog.SETTING_NAME,
configurationLog.SETTING_VALUE,
configurationLog.ROW_LST_UPD_TS,
configurationLog.ROW_LST_UPD_UID,
configurationLog.APP_ID
FROM
EVENT_MGT.CONFIGURATION_LOG configurationLog
INNER JOIN
(
SELECT APP_ID, MAX(ROW_LST_UPD_TS) maxTimestamp
FROM EVENT_MGT.CONFIGURATION_LOG
GROUP BY APP_ID
) latestSettingPerApp
ON
latestSettingPerApp.maxTimestamp <= configurationLog.ROW_LST_UPD_TS
and latestSettingPerApp.maxTimestamp >= configurationLog.ROW_LST_UPD_TS - 1/1440
and latestSettingPerApp.APP_ID = configurationLog.APP_ID
ORDER BY
configurationLog.APP_ID;
但在將其轉換為 LINQ 時遇到麻煩
這只是間接相關,因為它不是您的 LINQ 問題的解決方案,但我認為您的查詢最好使用窗口函數編寫。 我認為它更易於閱讀和維護,並且對於大型數據集可能會更有效率。
with max_vals as (
SELECT
SETTING_NAME,
SETTING_VALUE,
ROW_LST_UPD_TS,
ROW_LST_UPD_UID,
APP_ID,
max (ROW_LST_UPD_TS) over (partition by app_id) as max_ts
FROM
EVENT_MGT.CONFIGURATION_LOG configurationLog
)
select
SETTING_NAME, SETTING_VALUE, ROW_LST_UPD_TS, ROW_LST_UPD_UID, APP_ID
from max_vals
where
ROW_LST_UPD_TS = max_tx
order by
APP_ID
您使用的構造看起來就像您在分析函數不可用的 DMBS 中所做的一樣。
同樣,這不是解決方案,但超出了我在評論中的合理范圍。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.