SQL Server为一天选择一条记录

时间:2014-04-24 09:07:22

标签: sql sql-server

我有一个查询,它会在上周为网站选择[orderdate]。 我希望能够在一天内仅为给定网站选择一条记录。 我的解决方案如下:

select 
     SiteName
     , OrderDate 
from 
     Table1  
where 
     OrderDate >= dateadd(dd,(datediff(dd,-53690,getdate()-1)/7)*7,-53690)

,但是当您查看结果时,您会注意到对于site2的第21天,它会给出两条记录。我只需要选择一个。

SiteName..................OrderDate

Site1....................2014-04-21 16:00:37.650

Site2....................2014-04-21 16:00:39.697

Site2....................2014-04-21 16:00:39.697

Site3....................2014-04-21 16:00:35.180




Site1....................2014-04-22 16:00:46.113

Site2....................2014-04-22 16:00:50.817

Site3....................2014-04-22 16:00:53.163



Site1....................2014-04-23 16:00:50.993

Site2....................2014-04-23 16:00:53.193

Site3....................2014-04-23 16:00:55.727

**编辑问题**

嗨,对不起,这比简单地插入不同更复杂。下面是整个查询,但为了简单起见,我最初只包含了部分内容:

select distinct 
       SiteName 
       ,SUM(Case 
            When 
               OrderDate >= dateadd(dd,(datediff(dd,-53690,getdate()-1)/7)*7,-53690) Then 
                1
            Else 
                0 
            End
          ) as Completed 
from 
      table1 
where 
      CLIENT    in ('Site1','Site2','Site3','Site4','Site5','Site6','Site7') 
and 
      SiteName != '(Site8)' 
GROUP BY 
      SiteName 
order by 
      SiteName 

我只选择7个网站,避开网站8  结果是

SITENAME ..................完成

站点1 .......................... 3

站点2 .......................... 4

Site3 .......................... 3

Site4 .......................... 3

Site5 .......................... 3

Site6 .......................... 2

Sit7 ........................... 2

对于网站2,计数应为3而不是4,但尽管使用不同,但查询仍然为该日期添加了2条记录

2 个答案:

答案 0 :(得分:0)

我无法调试它,因为我无法访问SQL服务器,所以它可能无法正常工作,但请将其作为一个想法。

select SiteName, count(SiteName) from
    (
    select DISTINCT SiteName , OrderDate from Table1  where 
    OrderDate >= dateadd(dd,(datediff(dd,-53690,getdate()-1)/7)*7,-53690)
    )
group by siteName;

内部选择将删除重复项,外部选择将计算网站存在的次数。

答案 1 :(得分:0)

select DISTINCT SiteName , OrderDate from Table1  where 
OrderDate >= dateadd(dd,(datediff(dd,-53690,getdate()-1)/7)*7,-53690)