我正在寻找创建特殊视图的解决方案但却不知道如何解决它。 :(
我尽力让它变得清晰。 为了更好地再现一次图解和脚本。
数据库是Azure数据库(我认为它是SQL Server 2005) 我有下表。 (请不要批评结构,它是给予而不是来自我)
CREATE TABLE [dbo].[DeviceData](
[ID] [bigint] IDENTITY(1,1) NOT NULL,
[DeviceID] [bigint] NOT NULL,
[TimeStamp] [datetime] NOT NULL,
[Error] [nvarchar](50) NULL,
CONSTRAINT [PrimaryKey_e149e28f-5754-4889-be01-65fafeebce16] PRIMARY KEY CLUSTERED
(
[DeviceID] ASC,
[TimeStamp] ASC
))
-
DeviceData
-------------------------
ID (identity) | Int
DeviceID (PK) | Int
TimeStamp (PK) | DateTime
Error | String
INSERT INTO [dbo].[DeviceData]
([DeviceID]
,[TimeStamp]
,[Error])
VALUES
(
(1, '2013.01.01 10:00:00', "Error 1"),
(2, '2013.01.01 10:00:00', "Error 1"),
(3, '2013.01.01 10:00:00', "Error 1"),
(1, '2013.01.01 10:01:00', "Error 1"),
(2, '2013.01.01 10:01:00', null),
(1, '2013.01.01 10:02:00', "Error 2"),
(3, '2013.01.01 10:30:00', null)
)
-
ID | DeviceID | TimeStamp | Error
-------------------------------------------------------------
1 | 1 | 2013.01.01 10:00:00 | Error 1
2 | 2 | 2013.01.01 10:00:00 | Error 1
3 | 3 | 2013.01.01 10:00:00 | Error 1
4 | 1 | 2013.01.01 10:01:00 | Error 1
5 | 2 | 2013.01.01 10:01:00 | null
6 | 1 | 2013.01.01 10:02:00 | Error 2
7 | 3 | 2013.01.01 10:30:00 | null
我现在想要按设备分组数据,并在[错误]字段上分组“子组”。
我不知道如何用文字来描述它,所以请查看示例结果。
DeviceID | Begin | End | Error
---------------------------------------------------------------
1 | 2013.01.01 10:00:00 | 2013.01.01 10:02:00 | Error 1
2 | 2013.01.01 10:00:00 | 2013.01.01 10:01:00 | Error 1
1 | 2013.01.01 10:02:00 | 2013.01.01 10:02:00 | Error 2
3 | 2013.01.01 10:00:00 | 2013.01.01 10:30:00 | Error 1
如果有人能给我一个如何以最有效的方式解决我的观点的提示,那将是非常好的。
来自德国的问候和感谢 斯特芬
答案 0 :(得分:0)
我们可能需要完成这个工作,因为我在这里仍然缺少一些逻辑。
select deviceid ,min(timestamp) as begin, max(timestamp) as end, error
from devicedata
group by deviceid,error
这将返回接近你想要的结果,但它不会将空错误与错误1分组。这就是你在这里面对的'snafu'......它是如何处理这些空值并将它们与适当的错误。是否有可能第8行存在:
8 | 1 | 2013.01.01 11:30:00 | null
如果发生这种情况,你怎么知道null与哪个记录有关?