在SQL中查找最新版本(匹配日期匹配时错误)

发布于 2025-02-06 07:11:45 字数 2331 浏览 2 评论 0原文

我正在尝试按照记录/版本#来找出最古老的版本和订单。但是,这似乎有效,我遇到了一个错误,其中最新记录的开始日期是相同的(版本11092.0004和11092.0003)。 如何使其将11092.0004视为最新记录?

        SELECT     
                CONVERT(float, (DIM_Record.DWID + (ROW_NUMBER() OVER (PARTITION BY DIM_Record.DWID ORDER BY DIM_Record.SRC_START_DTTM)*.0001)) - .0001) AS [Version ID]
            ,   CONVERT(bit, CASE WHEN LAG(DIM_Record.SRC_START_DTTM) OVER (PARTITION BY DIM_Record.DWID ORDER BY DIM_Record.SRC_START_DTTM DESC) IS NULL THEN 1 ELSE 0 END) AS [Current Record]
            ,    DIM_Record.SRC_START_DTTM as Start_date
        FROM Date_Table.DIM_Record_HISTORY DIM_Record
            LEFT OUTER JOIN Date_Table.DIM_Record_TYP
                ON DIM_Record.DSN = DIM_Record_TYP.DSN
                    AND DIM_Record.PRJ_TYP_DSID = DIM_Record_TYP.DSID
        WHERE DIM_Record.DWID = '11092'

我试图编辑我的代码,以将[版本ID]添加到我的代码中,以获取[当前记录],

CONVERT(bit, CASE WHEN LAG(DIM_Record.SRC_START_DTTM) OVER (PARTITION BY DIM_Record.DWID ORDER BY (    CONVERT(float, (DIM_Record.DWID + (ROW_NUMBER() OVER (PARTITION BY DIM_Record.DWID ORDER BY DIM_Record.SRC_START_DTTM)*.0001)) - .0001)) DESC) IS NULL THEN 1 ELSE 0 END) AS [Current Record]

但是我会收到以下错误:

窗口函数不能在另一个窗口函数的上下文中使用

我的数据:

版本ID当前记录start_date
11092.000316/2/2022 12:00:00 AM
11092.000406/2/2022 12:00:00 AM
11092.000201/1/1/ 31/2022 5:36:46 PM
11092.000101/31/2022 12:00:00 AM
1109201/3/2022 4:31:44 PM

这里版本ID ID:11092.0004,我希望当前记录读取1。

I am trying to find out the oldest version by partion and order by the record/version #. This seems to work however, I encounter a bug where the start date for the latest record is the same (version 11092.0004 and 11092.0003).
How can I make it count the 11092.0004 as the latest record?

        SELECT     
                CONVERT(float, (DIM_Record.DWID + (ROW_NUMBER() OVER (PARTITION BY DIM_Record.DWID ORDER BY DIM_Record.SRC_START_DTTM)*.0001)) - .0001) AS [Version ID]
            ,   CONVERT(bit, CASE WHEN LAG(DIM_Record.SRC_START_DTTM) OVER (PARTITION BY DIM_Record.DWID ORDER BY DIM_Record.SRC_START_DTTM DESC) IS NULL THEN 1 ELSE 0 END) AS [Current Record]
            ,    DIM_Record.SRC_START_DTTM as Start_date
        FROM Date_Table.DIM_Record_HISTORY DIM_Record
            LEFT OUTER JOIN Date_Table.DIM_Record_TYP
                ON DIM_Record.DSN = DIM_Record_TYP.DSN
                    AND DIM_Record.PRJ_TYP_DSID = DIM_Record_TYP.DSID
        WHERE DIM_Record.DWID = '11092'

I tried to edit my code to add the [Version ID] into my code for [Current Record] like so

CONVERT(bit, CASE WHEN LAG(DIM_Record.SRC_START_DTTM) OVER (PARTITION BY DIM_Record.DWID ORDER BY (    CONVERT(float, (DIM_Record.DWID + (ROW_NUMBER() OVER (PARTITION BY DIM_Record.DWID ORDER BY DIM_Record.SRC_START_DTTM)*.0001)) - .0001)) DESC) IS NULL THEN 1 ELSE 0 END) AS [Current Record]

But I get the following Error:

window functions cannot be used in the context of another window function

My data:

Version IDCurrent RecordStart_date
11092.000316/2/2022 12:00:00 AM
11092.000406/2/2022 12:00:00 AM
11092.000201/31/2022 5:36:46 PM
11092.000101/31/2022 12:00:00 AM
1109201/3/2022 4:31:44 PM

Here VERSION ID: 11092.0004, I want Current record to read 1.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

初心 2025-02-13 07:11:45

使用row_number() = count(*)确定它是否是系列中的最后一个运行号码

CASE WHEN ROW_NUMBER() OVER (PARTITION BY DIM_Record.DWID 
                                 ORDER BY DIM_Record.SRC_START_DTTM)
        = COUNT(*)     OVER (PARTITION BY DIM_Record.DWID)
     THEN 1
     ELSE 0
     END

use ROW_NUMBER() = COUNT(*) to determine if it is the last running number in the series

CASE WHEN ROW_NUMBER() OVER (PARTITION BY DIM_Record.DWID 
                                 ORDER BY DIM_Record.SRC_START_DTTM)
        = COUNT(*)     OVER (PARTITION BY DIM_Record.DWID)
     THEN 1
     ELSE 0
     END
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文