SQL 2008 中的 DISTINCT 语句

Posted

技术标签:

【中文标题】SQL 2008 中的 DISTINCT 语句【英文标题】:DISTINCT statement in SQL 2008 【发布时间】:2017-02-06 23:49:40 【问题描述】:

如何让 DISTINCT 仅以“serviceType”结尾?我试过 union 和 intersect 都无济于事。

$tsql = "SELECT DISTINCT serviceType, product, provider, rate, qty, updated FROM contracts WHERE client='$_POST['client']' ";

我需要查看最新更新的 serviceType 记录以及其他可用信息,但不是我所做的每一个小改动。但是,我想将更改保存为存档。

【问题讨论】:

您是否只需要从合同中获取 * 从更新的 desc LIMIT 1 订购? @juju 限制不是 SQL Server。他们希望每个服务类型的最新行按照我相信的更新列降序排列。因此,每组问题都被许多最棒的 n 所欺骗。 是的,这就是我需要的马丁。我将开始研究解决方案,感谢您为我指明正确的方向。 我在想,我有一个ID作为这个表中的标识符和主键,最高的#ID是每条新记录创建的。难道我不能这样做:WHERE client='$_POST['client']' AND ID of servicetype is high? 听起来像,MAX(ID)..? 【参考方案1】:

这就是我在 SQL Server 中编写该查询的方式:

SELECT distinct  main.serviceType, b.product, b.provider, b.rate, b.qty, b.updated
FROM contracts  as main
Outer Apply (Select Top 1 
                    serviceType, product, provider, rate, qty, updated 
             FROM contracts as sub
             where main.serviceType = sub.serviceType
             Order by updated  desc
             ) b
WHERE client= @client

【讨论】:

感谢 Feryal!这非常接近,但出于某种原因它选择了最旧的。我会尝试使用代码,但这绝对是正确的方向。【参考方案2】:

好的,我明白了:

$tsql = "SELECT distinct  main.serviceType, b.product, b.provider, b.rate, b.qty, b.updated
    FROM contracts AS main
    OUTER APPLY (SELECT TOP 1 
                serviceType, product, provider, rate, qty, updated 
                FROM contracts as sub
                WHERE main.serviceType = sub.serviceType AND client='$_POST['client']'
                ORDER BY ID DESC
                ) b

    WHERE client='$_POST['client']' ";

谢谢菲亚尔。我只需要将 ORDER BY 更改为 ID,因为我在同一天进行了许多更改。

【讨论】:

以上是关于SQL 2008 中的 DISTINCT 语句的主要内容,如果未能解决你的问题,请参考以下文章

sql 语句中的DISTINCT以及在count中的使用

SQL初级SQL简介语法SELECT语句SELECT DISTINCT语句

SQL初级SQL简介语法SELECT语句SELECT DISTINCT语句

LINQ to SQL语句之Select/Distinct和Count/Sum/Min/Max/Avg (转)

SQL:数据去重的三种方法

sql语句去重