我面临着一个相当有趣的问题.我有一个具有以下结构的表:
CREATE TABLE [dbo].[Event]
(
Id int IDENTITY(1,1) NOT NULL,
ApplicationId nvarchar(32) NOT NULL,
Name nvarchar(128) NOT NULL,
Description nvarchar(256) NULL,
Date nvarchar(16) NOT NULL,
Time nvarchar(16) NOT NULL,
EventType nvarchar(16) NOT NULL,
CONSTRAINT Event_PK PRIMARY KEY CLUSTERED ( Id ) WITH (
PAD_INDEX = OFF,
STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON
)
)
Run Code Online (Sandbox Code Playgroud)
所以问题是我必须在网格中显示这些数据.有两个要求.第一个是显示所有事件,而不管是什么应用程序抛出它们.这很简单 - 选择语句可以非常轻松地完成工作.
第二个要求是能够按事件分组事件Application.换句话说,以一种方式显示所有事件,如果ApplicationId重复多次,则只获取每个应用程序的最后一个条目.此查询/视图中不再需要此时事件(Id)的主键.
您可能还注意到事件日期和时间是字符串格式.这没关系,因为它们遵循标准的日期时间格式:mm/dd/yyyy和hh:mm:ss.我可以按如下方式提取:
Convert( DateTime, (Date + ' ' + Time)) AS 'TimeStamp'
Run Code Online (Sandbox Code Playgroud)
我的问题是,如果我在其余列上使用AGGREGATE函数,我不知道它们会如何表现: …
是否可以使用2列而不是仅1为分区函数对表进行分区?
考虑一个包含3列的表
ID (int, primary key,
Date (datetime),
Num (int)
我想将这个表分为2列:Date和Num.
这是我使用1列(日期)对表进行分区的方法:
create PARTITION FUNCTION PFN_MonthRange (datetime)
AS
RANGE left FOR VALUES ('2009-11-30 23:59:59:997',
'2009-12-31 23:59:59:997',
'2010-01-31 23:59:59:997',
'2010-28-02 23:59:59:997',
'2010-03-31 23:59:59:997')
go
Run Code Online (Sandbox Code Playgroud)