запрос не возвращает отдельную запись

#sql-server #stored-procedures #distinct

#sql-сервер #хранимые процедуры #отчетная

Вопрос:

Привет, можете ли вы, пожалуйста, взглянуть, почему мой запрос не возвращает отдельную запись. я хочу результат со следующим условием OE1='SCHEDCHNG' , нужны только последние записи для orderid или ordernum означает только одну запись для ordern или 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 
  

результат запроса с повторяющейся записью

Комментарии:

1. DISTINCT исключая идентичные строки, все строки на вашем изображении разные.

2. @JaydipJ извините, я это пропустил, но это, я думаю, не повлияет на результирующий набор

3. Это разные записи. Например, 1870616 имеет два разных идентификатора

4. @AlexK. да, поэтому я не получаю правильного результата, но как я могу это сделать, пожалуйста, посоветуйте мне

5. @JohnCappelletti мы можем различать по порядку со всем результатом, нет никаких проблем, если я не буду отображать orderid

Ответ №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