【发布时间】:2021-01-11 13:16:04
【问题描述】:
我正在开发一个流服务,比如基于 C# NET.Core 的应用程序。我每分钟从客户端“ping”服务器,然后使用此查看器的时间和 ID 创建一个新的 SQL 条目。
以下是 5 分钟观看的示例:
StreamViewerId | TrackDate
1 | 2020-09-25 05:05:00
1 | 2020-09-25 05:06:00
1 | 2020-09-25 05:07:00
1 | 2020-09-25 05:08:00
1 | 2020-09-25 05:09:00
1 | 2020-09-25 05:10:00
...
我需要根据该数据制作一个“图表条”,我无法将 1 分钟的图形作为 xAxis,因此我尝试使每个图形点至少 5 分钟或更长时间。问题是,如果我只使用下面的查询,所有的观众都被乘以 x5,因为他们每分钟 ping 服务器,所以一个组中会有 5 行:
SELECT
COUNT(LiveStreamViewerId) [Count],
dateadd(minute,(datediff(minute,0,TrackDate)/5)*5,0) [TrackDate]
FROM LiveStreamViewerTracks
WHERE LiveStreamId = 1
GROUP BY dateadd(minute,(datediff(minute,0,TrackDate)/5)*5,0)
我实际上得到了这个结果:
Count | TrackDate
5 | 2020-09-25 05:05:00
...
我想将此查看器视为只有一个寄存器(因为只有一个查看器,而不是 5 个)。以下是预期结果:
Count | TrackDate
1 | 2020-09-25 05:05:00
我不能使用两个 SQL 分区,因为我不能按 viewerid 分组,因为我已经按日期时间分组,所以我不能过滤它。有人可以帮忙吗?
提前致谢!
【问题讨论】:
-
向我们展示一些示例表数据和预期结果 - 全部为格式化文本(无图像)。minimal reproducible example
-
@jarlh 已编辑,谢谢!
-
您不希望 2020-09-25 05:10:00 也返回吗?我认为该时间戳是一个新的 5 分钟周期。
-
@jarlh 如果我这样做,我会考虑 2020-09-25 05:05:00 那么,对吧?因为这个逻辑会将这个时间戳转为上一组,在范围内产生相同的数字,对吧?
-
所以下一个时段是 05:10:01 - 05:15:01,然后是 05:15:02 - 05:20:02 和 05:20:03 - 05:25: 03等?
标签: c# sql sql-server .net-core