2014-04-24 129 views
0

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

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

,但是当你看一下结果,你会发现日期为21 SITE2它给出了两个记录。我只需要选择一个。

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 结果是

网站名称...... ............已完成

Site1 ......................... 3

Site2 .......................... 4

Site3。 ......................... 3

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

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

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

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

站点2的数应该是3而不是4个,但尽管使用不同的查询仍在增加2个记录该日期

回答

0

我无法调试它,因为我无法访问SQL Server,所以它可能不会像这样工作,但将其作为一个想法。

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; 

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

+0

你好,抱歉,这是非常复杂的不是简单地插入distinct.My糟糕了,我应该已经包含了整个查询,但我只是为了简单起见,它的一部分,完整的查询是如下选择不同的网站名 , SUM(案例当订购日期> = DATEADD(DD,(DATEDIFF(DD,-53690,GETDATE() - 1)/ 7)* 7,-53690) 然后1 否则0 完)从表1,其中CLIENT完成 ('Site1','Site2','Site3','Site4','Site5','Site6','Site7')我只选择了7个避免si的网站te 8 –

+0

请更新与完整查询的问题...不要留在这里的评论。 – Frazz

+0

感谢迈克尔,但我使用循环计数的原因,因为它需要照顾的情况下,如果没有记录的网站,它仍然给我0作为计数 –

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

请解释你的答案。只有代码答案不能帮助任何人了解你在做什么。 – RubberDuck

+0

@ ckuhn203:你是对的,在这种情况下唯一需要添加DISTINCT的结果是不同的。正如你所看到的,在例子中,对于Site2,我们有两次'2014-04-21 16:00:39.697'!看看[这里](http://www.w3schools.com/sql/sql_distinct.asp) – armen

相关问题