Sql 在记录和临时表之间进行选择
我想显示带有日期序列的2月份记录的电费 如果当月未提供关税,则显示以前的关税 请参阅快照以了解更多说明 作为 设置日期优先1 开始 声明@Day int 声明@fromDt日期 声明@endDate日期 声明@finalendate日期 声明@currentdate=GETDATE 将@fromDt=CASTCONVERTvarchar,DATEPARTYEAR,@Dateset+'-'+CONVERTvarchar,DATEPARTMONTH,@Dateset+'-01'设置为日期Sql 在记录和临时表之间进行选择,sql,sql-server,sql-server-2008,tsql,Sql,Sql Server,Sql Server 2008,Tsql,我想显示带有日期序列的2月份记录的电费 如果当月未提供关税,则显示以前的关税 请参阅快照以了解更多说明 作为 设置日期优先1 开始 声明@Day int 声明@fromDt日期 声明@endDate日期 声明@finalendate日期 声明@currentdate=GETDATE 将@fromDt=CASTCONVERTvarchar,DATEPARTYEAR,@Dateset+'-'+CONVERTvarchar,DATEPARTMONTH,@Dateset+'-01'设置为日期 SET @
SET @endDate = DATEADD(s, -1, DATEADD(mm, DATEDIFF(m, 0, @fromDt) + 1, 0))
IF @endDate >= @currentdate
BEGIN
SET @finalEndDate = DATEADD(D, -DATEDIFF(D, @currentdate, @endDate) - 1, @endDate);
SET @Day = FORMAT(@finalEndDate, 'dd')
END
ELSE
SET @finalEndDate = @endDate
SET @Day = FORMAT(@finalEndDate, 'dd')
SET NOCOUNT ON;
PRINT @fromDt;
PRINT @finalEndDate;
IF 1 = 0
BEGIN
SET FMTONLY OFF
END
IF 1 = 0
BEGIN
SET FMTONLY OFF
END
CREATE TABLE #TestTable2 (
tempdate date
);
BEGIN
DECLARE @VarDate datetime = CONVERT(date, @FromDt)
WHILE @VarDate <= CONVERT(varchar, @finalEndDate)
BEGIN
INSERT INTO #TestTable2 (tempdate)
VALUES (@VarDate)
SET @VarDate = DATEADD(DAY, 1, @VarDate)
END
BEGIN
WITH tarifReactivelow
AS (SELECT
b.tariffrate AS TRL,
b.EFFECTIVEFROMDATE AS TRLeffectivefrmdate,
b.effectivetodate AS TRLeffectivetodate,
a.tempdate
FROM (SELECT
*
FROM #TestTable2) a
RIGHT JOIN T_EMS_REVENUE_TARIFFDETAILS b
ON b.TARIFFTYPE = 10
AND b.REACTIVECHARGETYPE = 2
AND (
(a.tempdate BETWEEN CONVERT(date, EFFECTIVEFROMDATE) AND CONVERT(date, EFFECTIVETODATE))
OR (a.tempdate BETWEEN CONVERT(date, EFFECTIVEFROMDATE) AND CONVERT(date, EFFECTIVETODATE)
OR CONVERT(date, EFFECTIVEFROMDATE) <= a.tempdate)
))
SELECT
*
FROM tarifReactivelow
END
DROP TABLE #TestTable2
END
END您可以使用top 1和 大概是这样的:
select *
from #testtable2 as tt
outer apply (
select top 1 td.*
from t_ems_revenue_tariffdetails as td
where td.tarifftype=10
and td.reactivechargetype=2
and td.effectivefromdate<=tt.tempdate
order by td.effectivefromdate desc
) x
请不要
select *
from #testtable2 as tt
outer apply (
select top 1 td.*
from t_ems_revenue_tariffdetails as td
where td.tarifftype=10
and td.reactivechargetype=2
and td.effectivefromdate<=tt.tempdate
order by td.effectivefromdate desc
) x