【问题标题】:Distinct one column on two tables SQL Server 2008两个表SQL Server 2008上的不同一列
【发布时间】:2015-01-14 20:47:12
【问题描述】:

我有两个不同的表,我只想在一列上使用 distinct。我只想获取最近的记录。我应该在 SQL Server 2008 中编写什么查询?我想使用唯一的 CustomerID 而不是任何其他列。

表 1:Customer
栏目:CustomerID, CustomerName

表 2:Order
列:OrderID, CustomerID, OrderName

我尝试了两个 SQL 查询都不起作用

第一次查询

select Distinct on (CustomerID) CustomerID, CustomerName, OrderID, OrderName
from Customer
left join Order on Customer.CustomerID = Order.CustomerID

第二次查询:

select Max(Distinct ID) 
    CustomerID, CustomerName, OrderID, OrderName
from
    Customer 
left join 
    Order on Customer.CustomerID = Order.CustomerID

【问题讨论】:

  • 对于在原始(不明确)结果中有多个条目的客户的 OrderID 有何期望?
  • 你的问题一点都不清楚。你想在这里做什么?你提到了一些关于最近的记录......什么定义了最近?您发布的任何一个表格中都没有日期列。
  • 我认为他只想要每个客户的最新订单。
  • 我假设您的客户表对于每个客户只有一条记录,并且当您加入订单时,您将获得多条记录 - 每个订单一条。当您说“最近的记录”时,您的意思是最后一个订单吗?

标签: sql sql-server database sql-server-2008


【解决方案1】:

假设较高的 OrderID 是最新的,如果我正确理解您的要求,这应该可以工作:

select
    c.CustomerID,
    c.CustomerName,
    o.OrderID,
    o.OrderName
from Customer as c
    inner join (select
                    CustomerID,
                    max(update_date) as max_update_date
                from Customer
                group by CustomerID) as mc
        on mc.CustomerID = c.CustomerID
        and mc.max_update_date = c.update_date
    inner join Order as o
        on o.CustomerID = c.CustomerID
    inner join (select
                    CustomerID,
                    max(OrderID) as max_OrderID
                from Order
                group by CustomerID) as m
        on m.CustomerID = c.CustomerID
        and m.max_OrderID = o.OrderID

【讨论】:

  • 感谢 Ron Smith,但它不起作用。我仍然收到多条记录。
  • 您的 Customer 表中是否有重复的 CustomerIDS 或您的 Order 表中有重复的 OrderID?
  • 感谢您的回复。我在客户表上有重复的客户 ID
  • 重复的 CustomerID 上的 CustomerName 值是否不同?如果是这样,您如何选择要显示的名称?
  • 我知道它对我的数据库非常混乱,所以请留下它。你能给我一个带有两个表连接并在一列上使用不同的查询示例吗?请问?
猜你喜欢
  • 2015-03-14
  • 2014-05-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多