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初级SQL简介语法SELECT语句SELECT DISTINCT语句
SQL初级SQL简介语法SELECT语句SELECT DISTINCT语句