现在我自定义查询以获取特定数据,我想从该数据中获取上一行数据
我尝试了此查询,但它得到了错误
SELECT Data_date -(SELECT * FROM [x].[dbo].[JSON_SOURCE] WHERE Data_date <= (SELECT TOP(1) Data_Date
FROM [x].[dbo].[JSON_SOURCE]
where ([Actual_cumulative] != null OR LTRIM(RTRIM([Actual_cumulative])) !='')
AND ([Early_Variance_monthly] != null OR LTRIM(RTRIM([Early_Variance_monthly])) !='' )
AND ([Early_Variance_cumulative] != null OR LTRIM(RTRIM([Early_Variance_cumulative])) !='' )
AND ([Late_Variance_monthly] != null OR LTRIM(RTRIM([Late_Variance_monthly])) !='' )
AND ([Late_Variance_cumulative] != null OR LTRIM(RTRIM([Late_Variance_cumulative])) !='' )
AND lower([Slug_Type]) IN('lg') ORDER BY Data_Date DESC) AND lower([Slug_Type]) IN('lg'))FROM [x].[dbo].[JSON_SOURCE]
此查询正在选择我想要的数据,从此查询结果中我想获取以前的数据是可能的吗?
SELECT * FROM [x].[dbo].[JSON_SOURCE] WHERE Data_date <= (SELECT TOP(1) Data_Date
FROM [x].[dbo].[JSON_SOURCE]
where ([Actual_cumulative] != null OR LTRIM(RTRIM([Actual_cumulative])) !='')
AND ([Early_Variance_monthly] != null OR LTRIM(RTRIM([Early_Variance_monthly])) !='' )
AND ([Early_Variance_cumulative] != null OR LTRIM(RTRIM([Early_Variance_cumulative])) !='' )
AND ([Late_Variance_monthly] != null OR LTRIM(RTRIM([Late_Variance_monthly])) !='' )
AND ([Late_Variance_cumulative] != null OR LTRIM(RTRIM([Late_Variance_cumulative])) !='' )
AND lower([Slug_Type]) IN('lg') ORDER BY Data_Date DESC) AND lower([Slug_Type]) IN('lg')
答案 0 :(得分:0)
因此,您想将表自身连接起来,并在表中选择相关行以将原始数据放在旁边。
为此,您可以对查询进行排序和分区,以便在每条记录的旁边放置一些符合WHERE子句的相关记录,然后使用分区的ORDER知道要选择哪一行。
我引入了ISNULL以消除WHERE中的某些复杂性。
看看这是如何工作的,您可能需要更改某些顺序或> = <=运算符。
Select *
FROM
(
SELECT *, ROW_Number() over (partition by a.Id order by isnull(b.Data_Date,'1900-01-01') Desc) as RowOrder
FROM [x].[dbo].[JSON_SOURCE] a
left join [x].[dbo].[JSON_SOURCE] b
ON a.Id != b.Id --Use whatever your Primary Key is to prevent selecting the same row as a secondary row.
AND a.Data_date <= b.Data_date
AND a.Slug_Type = b.Slug_Type
WHERE
LTRIM(RTRIM(ISNULL(b.[Actual_cumulative],''))) !=''
AND LTRIM(RTRIM(ISNULL(b.[Early_Variance_monthly],''))) !=''
AND LTRIM(RTRIM(ISNULL(b.[Early_Variance_cumulative],''))) !=''
AND LTRIM(RTRIM(ISNULL(b.[Late_Variance_monthly],''))) !=''
AND LTRIM(RTRIM(ISNULL(b.[Late_Variance_cumulative],''))) !=''
AND lower(a.[Slug_Type]) IN('lg')
) cte
WHERE cte.RowOrder = 1