SQL 中的当前列
IsCurrent Column In SQL
我有一个与此类似的架构:
ID UserID DateApplied IsCurrent
1 1 2016-07-01 0
2 2 2016-07-05 0
3 1 2016-07-04 0
4 1 2016-07-10 1
5 2 2016-07-07 1
有没有办法使 IsCurrent 列成为计算列,该列适用于每个用户的最大日期。
即:每次添加新记录时更新table,最新的记录将具有当前(最近的)DateTime,这应该使IsCurrent 列为真。
我相信我现在可以通过使用一个函数来让它工作。计算列规范似乎只能引用该特定行的列,但您可以使用这些参数调用方法。
所以,我所做的就是定义函数。对于这种情况,它将是这样的:
CREATE FUNCTION IsCurrent (@UserID int, @DateApplied int)
RETURNS BIT AS
BEGIN
DECLARE @MaxDate DATETIME;
DECLARE @IsCurrent bit;
SET @MaxDate = (SELECT MAX(DateApplied)
FROM MyTable
WHERE MyTable.UserID = @UserID)
IF (@MaxDate = @DateApplied)
SET @IsCurrent = 1;
ELSE
SET @IsCurrent = 0;
RETURN @IsCurrent;
END
GO
那么您的计算列规范将是:
dbo.IsCurrent(UserID, DateApplied)
您可以使用 View
并使用 ROW_NUMBER() OVER PARTITION BY
SELECT
Id,
UserID,
DateApplied,
CASE WHEN x.RowNum = 1 THEN 1 ELSE 0 END IsCurrent
FROM
(
SELECT
RowNum = ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY DateApplied DESC),
Id,
UserID,
DateApplied
FROM YourTable
) x
我有一个与此类似的架构:
ID UserID DateApplied IsCurrent
1 1 2016-07-01 0
2 2 2016-07-05 0
3 1 2016-07-04 0
4 1 2016-07-10 1
5 2 2016-07-07 1
有没有办法使 IsCurrent 列成为计算列,该列适用于每个用户的最大日期。
即:每次添加新记录时更新table,最新的记录将具有当前(最近的)DateTime,这应该使IsCurrent 列为真。
我相信我现在可以通过使用一个函数来让它工作。计算列规范似乎只能引用该特定行的列,但您可以使用这些参数调用方法。
所以,我所做的就是定义函数。对于这种情况,它将是这样的:
CREATE FUNCTION IsCurrent (@UserID int, @DateApplied int)
RETURNS BIT AS
BEGIN
DECLARE @MaxDate DATETIME;
DECLARE @IsCurrent bit;
SET @MaxDate = (SELECT MAX(DateApplied)
FROM MyTable
WHERE MyTable.UserID = @UserID)
IF (@MaxDate = @DateApplied)
SET @IsCurrent = 1;
ELSE
SET @IsCurrent = 0;
RETURN @IsCurrent;
END
GO
那么您的计算列规范将是:
dbo.IsCurrent(UserID, DateApplied)
您可以使用 View
并使用 ROW_NUMBER() OVER PARTITION BY
SELECT
Id,
UserID,
DateApplied,
CASE WHEN x.RowNum = 1 THEN 1 ELSE 0 END IsCurrent
FROM
(
SELECT
RowNum = ROW_NUMBER() OVER (PARTITION BY UserID ORDER BY DateApplied DESC),
Id,
UserID,
DateApplied
FROM YourTable
) x