【问题标题】:DISTINCT statement in SQL 2008SQL 2008 中的 DISTINCT 语句
【发布时间】: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)..?

标签: sql-server-2008 greatest-n-per-group


【解决方案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,因为我在同一天进行了许多更改。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-06
    • 2012-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多