gpt4 book ai didi

sql - T-SQL通过RelevanceDate从表/log_table中检索历史数据

转载 作者:行者123 更新时间:2023-12-03 13:41:32 24 4
gpt4 key购买 nike

我有以下表格:

1) TBL (ID, Data, LastUpdated, DateCreated)
2) TBL_LOG(Log_ID, LogCreateDate, ID, Data, LastUpdated, DateCreated)


TBL用于存储当前数据,而 TBL_LOG用于存储数据在 TBL中的每一次更改(使用更新触发器,将从 TBL删除的记录复制到 TBL_LOG)。

现在,我需要按相关日期检索数据。
如何编写表值函数(或其他替代方法),该函数将根据 RelevanceDate返回数据。

我了解逻辑,但找不到用SQL编写的好方法...
逻辑看起来像:

@RelevanceDate = '2011-03-01'
IF TBL.LastUpdated <= @RelevanceDate THEN return data from TBL
ELSE IF Exists data in TBL_LOG where TBL_LOG.LastUpdated <= @RelevanceDate
THEN return most resent data from TBL_LOG where TBL_LOG.LastUpdated <= @RelevanceDate
ELSE IF Exists data in TBL_LOG where TBL_LOG.LastUpdated > @RelevanceDate
THEN return the oldest data from TBL_LOG.LastUpdated > @RelevanceDate
ELSE return data from TBL


对于 TBL中的所有记录,此函数应使用上述逻辑返回数据。

简而言之,对于TBL中的每一行,我都需要“ RelevanceDate”上的数据。

最佳答案

在调查结束时,我最终遇到了以下问题:

DECLARE @RelevanceDate DATETIME
SET @RelevanceDate = '2012-03-01'

SELECT
MainData.ID, MainData.Data, MainData.LastUpdated, MainData.DateCreated
FROM (
SELECT
*
,ROW_NUMBER() OVER(PARTITION BY AllData.ID, AllData.RowNum ORDER BY AllData.LastUpdated) AS MainRowNumber
FROM (
--Current Data
SELECT
NULL LogID
,NULL LogCreateDate
,*
,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY LastUpdated DESC) AS RowNum
FROM TBL
WHERE (lastupdate<=@RelevanceDate)

UNION

--History Data
SELECT
*
,ROW_NUMBER() OVER(PARTITION BY ID ORDER BY LastUpdated) AS RowNum
FROM TBL_LOG
WHERE lastupdate>@RelevanceDate
) AllData WHERE AllData.RowNum=1
) MainData
WHERE MainData.MainRowNumber = 1


如果有人对如何更好地提出建议,我将很高兴看到它:)

关于sql - T-SQL通过RelevanceDate从表/log_table中检索历史数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9770921/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com