我有一个每分钟测量的数据库,这个值是当时的当前流量。但我只想在查询中每15分钟显示一次测量结果。所以相反我只想在9:00,9:15等看到RecDate的值。我试图使用,但是我无法看到RecDate在值之间是什么,它会将它们添加到那段时间。我还尝试了其他一些东西,但我想我可能使用了错误的方法。
我目前有这段代码,看看总流量。
canActivate() {
if (this.localStorage.get('user')) {
return true
}
this.router.navigate([ '/login' ]) return false;
}
这会在我的表格中给出这些值。
SELECT rv.RecDate, sum(rv.Value_num) as TotalSUM
FROM dbo.Channels c INNER JOIN
(SELECT rv.*, TRY_CONVERT(numeric(20, 4), rv.Value) AS value_num, (LEFT(TRY_CONVERT(datetime2(0), rv.Timestamp), 16)) AS RecDate
FROM dbo.RecordedValues rv) rv ON c.SourceId = rv.SourceId AND c.Id = rv.ChannelId
WHERE
(c.Tag LIKE N'%1%'
OR c.Tag LIKE N'%2%'
OR c.Tag LIKE N'%3%'
OR c.Tag LIKE N'%4%')
AND Timestamp BETWEEN DATEADD(day,-1,GETDATE()) AND GETDATE()
Group BY rv.RecDate
我怎么能得到这个?:
RecDate TotalSum
2017-09-20 10:02| 900
2017-09-20 10:03| 1000
2017-09-20 10:04| 950
2017-09-20 10:05| 975
2017-09-20 10:06| 960
etc.
答案 0 :(得分:1)
你也可以像下面这样使用datepart来获得15分钟的间隔
datepart(minute,timestamp)%15=0
您还可以使用numbers表格预填充下面的表格
select DATEADd(MI,number,
Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))),Number
from numbers
where number%15=0
会给我以下结果
2017-09-21 00:00:00.000
2017-09-21 00:15:00.000
2017-09-21 00:30:00.000
2017-09-21 00:45:00.000
2017-09-21 01:00:00.000
2017-09-21 01:15:00.000
2017-09-21 01:30:00.000
2017-09-21 01:45:00.000
现在您可以使用联接来获得所需的结果
;with cte
as
(
select DATEADd(MI,number,Convert(DateTime, DATEDIFF(DAY, 0, GETDATE()))) as dt
from numbers
where number%15=0
)
,cte1
(
your query
)
select * from cte c
join cte1 c1
on c.dt=c1.datecolumn
如果您可以实现数字表的结果(根据需要更改日期)并创建索引,这可能会很好用
答案 1 :(得分:0)
您可以在子查询中使用VALUES
。
SELECT
B.TempCol,
SUM(B.Value) AS SumValue
FROM
(
SELECT
A.Value,
CONCAT(CONVERT(DATE, A.RecDate),' ', DATEPART(HOUR, A.RecDate), ':', (SELECT TOP 1 T.Title FROM (VALUES (15, '00'), (30, '15'), (45, '30'), (60, '00')) T(Id, Title) WHERE DATEPART(MINUTE, A.RecDate) < T.Id)) TempCol
FROM
YourTable A
) B
GROUP BY
B.TempCol
使用下表,找到日期的时间范围。
(VALUES (15, '00'), (30, '15'), (45, '30'), (60, '00'))
结果:
2017-09-20 10:02 -> 2017-09-20 10:00
2017-09-20 10:17 -> 2017-09-20 10:15
2017-09-20 10:46 -> 2017-09-20 10:45