#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