我的表格有这样的定义:
CREATE TABLE [dbo].[Contact]
(
ClientNumber [numeric] (20, 0) NULL,
ContactDate [Date] NULL,
Name [text] NULL,
AdditionalInformation [text] NULL
)
此表填写了一个月的信息。每个客户可能有一天的多个条目。意思是可能有这样的条目:
42 2015-12-09 Felix called today
42 2015-12-09 Fexclicx ...
我的目标是从表中获取所有客户端结果,条件是每个客户端编号每天应该只有一个条目。我不关心显示哪个(这里)两个条目,所以像top 1
。
到目前为止,我试图通过一个截然不同的方式实现这个目标:
select distinct ClientNumber, ContactDate, * from Contact
不幸的是,这并不限制结果只显示特定日期的客户端条目一次。他们仍然都出现了。
我怎样才能获得所有条目,但每天只有一个条目的一个条目?
答案 0 :(得分:1)
我建议您编辑表,因此它有一个ID列(您可以将其设置为主键)。如果您这样做,您可以使用我发布的查询。
我不知道如何通过分组获取所需信息,因为您无法汇总文字列。
CREATE TABLE [dbo].[#Contact]
(
ID int IDENTITY(1,1),
ClientNumber [numeric] (20, 0) NULL,
ContactDate [Date] NULL,
Name [text] NULL,
AdditionalInformation [text] NULL
)
declare @Date datetime
set @Date = GETDATE()
INSERT INTO #Contact VALUES (1,@Date,'First Client','Info 1')
GO
declare @Date datetime
set @Date = GETDATE()
set @Date = DATEADD(DAY,RAND()*100,@Date)
INSERT INTO #Contact VALUES (1,@Date,'First Client','Info 2')
GO
declare @Date datetime
set @Date = GETDATE()
set @Date = DATEADD(DAY,RAND()*100,@Date)
print @Date
INSERT INTO #Contact VALUES (2,@Date,'2nd Client','Info 1')
GO
declare @Date datetime
set @Date = GETDATE()
set @Date = DATEADD(DAY,RAND()*100,@Date)
INSERT INTO #Contact VALUES (2,@Date,'2nd Client','Info 2')
GO
declare @Date datetime
set @Date = GETDATE()
set @Date = DATEADD(DAY,RAND()*100,@Date)
INSERT INTO #Contact VALUES (2,@Date,'2nd Client','Info 3')
GO
declare @Date datetime
set @Date = GETDATE()
set @Date = DATEADD(DAY,RAND()*100,@Date)
INSERT INTO #Contact VALUES (3,@Date,'3rd Client','Info 1')
SELECT * FROM #Contact c1 join (
SELECT ClientNumber, MAX(ID) MaxID
FROM #Contact
GROUP BY ClientNumber ) c2 on c1.ClientNumber = c2.ClientNumber and c1.ID = c2.MaxID
答案 1 :(得分:0)
您可以使用分组功能,如下所示:
SELCET ClientNumber, ContactDate, Name
FROM Contact
GROUP BY ContactDate, Name