【问题标题】:query is not returning distinct record查询没有返回不同的记录
【发布时间】:2016-10-19 14:19:14
【问题描述】:

您好,请您看看为什么我的查询没有返回不同的记录。我想要具有以下条件OE1='SCHEDCHNG' 的结果,只需要每个 orderid 或 ordernum 的最近记录意味着每个 ordernum 或 orderid 只有一条记录,并且 dropdate 也为空。我的查询如下

    select DISTINCT TOP 100 OE.ORDERID,OE.ID,OE.ORDERNUM,OE.OE4  from OrderExports OE
inner join (
    select ORDERNUM, max(OE4) as MaxDate
    from OrderExports
    group by ORDERNUM
) tm
 on OE.ORDERNUM = tm.ORDERNUM and OE.OE4 = tm.MaxDate
 inner join orde_ O on OE.ORDERID = O.ORDERID 
 WHERE OE1='SCHEDCHNG' AND O.DROPDATE is null 

【问题讨论】:

  • DISTINCT 排除相同的行,您图片中的所有行都不同。
  • @JaydipJ 对不起,我错过了,但这不会影响我认为的结果集
  • 这些是不同的记录。例如,1870616 有两个不同的 ID
  • @AlexK。是的,所以我没有得到正确的结果,但我该怎么做,请告诉我
  • @JohnCappelletti 我们可以在 ORDERNUM 上区分所有结果如果我不显示 orderid 没有任何问题

标签: sql-server stored-procedures distinct


【解决方案1】:

这里的细节很少,但我认为您想要这些方面的东西。

with SortedResults as
(
    select OE.ORDERID
        , OE.ID
        , OE.ORDERNUM
        , OE.OE4  
        , ROW_NUMBER() over(partition by OE.ORDERID, OE.ORDERNUM order by OE.OE4 desc) as RowNum
    from OrderExports OE
    inner join 
    (
        select ORDERNUM
            , max(OE4) as MaxDate
        from OrderExports
        group by ORDERNUM
    ) tm on OE.ORDERNUM = tm.ORDERNUM and OE.OE4 = tm.MaxDate
     inner join orde_ O on OE.ORDERID = O.ORDERID 
     WHERE OE1='SCHEDCHNG' 
        AND O.DROPDATE is null 
)

select ORDERID
    , ID
    , ORDERNUM
    , OE4
from SortedResults
where RowNum = 1

【讨论】:

    【解决方案2】:

    您可以尝试使用 max 和 group by,如下所示:

    SELECT a.ID, max(a.ORDERID) as OrderID, max(a.ORDERNUM) as OrderNum,MAX(OE.OE4) as OE4 FROM
    (
    --your query
     ) a
     group by a.ID 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-10
      • 2013-10-31
      • 2022-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多