【问题标题】:Converting Oracle SQL to LLBLGEN LINQ expression C#将 Oracle SQL 转换为 LLBLGEN LINQ 表达式 C#
【发布时间】:2020-04-27 18:31:13
【问题描述】:

我有一个包含 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

【问题讨论】:

    标签: c# sql oracle linq llblgenpro


    【解决方案1】:

    这只是间接相关,因为它不是您的 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 中所做的那样。

    同样,这不是一个解决方案,但超出了我在评论中的合理范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-19
      • 1970-01-01
      • 2018-04-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多