每天只查询一个客户端条目

时间:2016-01-28 13:42:59

标签: sql-server-2008

我的表格有这样的定义:

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

不幸的是,这并不限制结果只显示特定日期的客户端条目一次。他们仍然都出现了。

我怎样才能获得所有条目,但每天只有一个条目的一个条目?

2 个答案:

答案 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