SQL Server将用户函数结果包含到选择查询中
我有这个存储函数SQL Server将用户函数结果包含到选择查询中,sql,sql-server,Sql,Sql Server,我有这个存储函数 function GetPrevReading( @utility int, @asofdate datetime ) returns decimal(10,5) 此函数使用以下字段从表中返回上一次仪表读数: utility - int date - datetime reading - numeric(18,4) 在此表上使用select时,我希望将日期设置为参数,并从表中获取: Utility Previous Reading (distinct) GetPrev
function GetPrevReading(
@utility int,
@asofdate datetime
) returns decimal(10,5)
此函数使用以下字段从表中返回上一次仪表读数:
utility - int
date - datetime
reading - numeric(18,4)
在此表上使用select时,我希望将日期设置为参数,并从表中获取:
Utility Previous Reading
(distinct) GetPrevReading(utility from query, @date from parameter)
Utility Date Reading
1 2013-10-1 105.6
1 2013-11-1 123.72
2 2013-10-1 226.1
2 2013-10-1 238.18
我希望函数GetPrevReading从当前行获取参数“utility”。
是否可以通过查询来实现这一点,或者我应该创建一个存储过程
例如,以下表格:
Utility Previous Reading
(distinct) GetPrevReading(utility from query, @date from parameter)
Utility Date Reading
1 2013-10-1 105.6
1 2013-11-1 123.72
2 2013-10-1 226.1
2 2013-10-1 238.18
现在,如果我将参数@date设置为2013-10-29,我将得到以下结果:
Utility PreviousReading
1 105.6
2 226.1
这里,我的函数应该在第一行得到@utility=1和@asofdate='2013-10-29',在第二行得到@utility=2和@asofdate='2013-10-29'。我是否理解这个问题;该函数为此调用返回
GetPrevReading( 1,2013-10-29)
返回
1, 105.6
2, 226.1
您想在函数及其结果和基础表之间联接吗?您可以在SQL 2005+中使用连接
试试看。我修复了数据类型中的一些不一致之处,并假设您的最后一行样本数据应该以2013-11-01作为日期。此外,函数的编写方式不是获取以前的读数,而是获取该日期的读数
CREATE TABLE MyTable (
Utility Int,
Date Date,
Reading Decimal(10,5)
);
INSERT INTO MyTable (Utility, Date, Reading)
VALUES
(1,'2013-10-01', 105.60),
(1,'2013-11-01', 123.72),
(2,'2013-10-01', 226.10),
(2,'2013-11-01', 238.18);
CREATE FUNCTION dbo.GetPrevReading(
@utility int,
@asofdate datetime
)
RETURNS Decimal(10,5)
AS
BEGIN
RETURN (
SELECT TOP 1 Reading
FROM MyTable
WHERE Utility = @Utility
AND Date = @asofdate
ORDER BY Date DESC
)
END;
SELECT
Utility
,Date
,dbo.GetPrevReading(Utility, Date)
FROM (
SELECT Utility, Max(Date) Date
FROM MyTable
WHERE Date < '2013-10-29'
GROUP BY Utility
) x;
这是返回单个值的标量UDF吗?等等,为什么表中的实用程序是nvarchar20,函数的输入是int?我的坏,实用程序是int。我改变了,是的,UDF是scalarIs,你的读数是18,4还是10,5?