我有一个应用程序,它每小时在MS SQL数据库中生成一个条目。 12日FEB的最后一个条目是零值,并在我的每周报告中显示。
我想要做的是从前一个计数中取值并输入字段而不是零值。
有人可以提供一些关于如何做到这一点的建议,因为它超出了我的TSQL技能吗?
SELECT * FROM [dbo].[CountDetails]
WHERE [updateTime] < '2013-02.13'
AND [updateTime] > '2013-02.12'
AND ( DATEPART(hh,[updateTime])= '22' OR DATEPART(hh,[updateTime])= '23' )
注意:应用程序应该将计数归零午夜,但是在12日FEB它发生得很早,我知道原因。
编辑:总共有5个IP地址和6个计数器,因为192.168.168.11有2个计数器。所以2111到2116是22:58所有可用计数器的完整条目,2117到2122是23:58所有可用计数器的完整条目。我需要用22:58的相应值替换23:58值。
答案 0 :(得分:0)
在此猜测,但加入ipAddress
,counterNumber
和datetime
不包括小数秒的更新,以小时为单位(首先SELECT
部分为安全起见):
UPDATE b
SET count = a.count
-- SELECT *
FROM dbo.CountDetails a
JOIN dbo.CountDetails b ON a.ipAddress = b.ipAddress AND a.counterNumber = b.counterNumber
AND CONVERT(VARCHAR(20),b.updateTime,120) = CONVERT(VARCHAR(20),DATEADD(HOUR,1,a.updateTime),120)