簡體   English   中英

將 Oracle SQL 轉換為 LLBLGEN LINQ 表達式 C#

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM