SQL Min (Date) проблема с получением всех дат - PullRequest
1 голос
/ 20 августа 2010

Я пытаюсь получить только те записи, которые являются минимальной датой идентификатора заказа.

У меня есть следующие настройки:

select
op.OrderID,
op.id,
MIN(op.Date) AS Date
From OrderPermits op
GROUP BY 
Op.OrderId
op.id,
MIN(op.Date) AS Date

Заказы имеют от 1 до многих разрешений на заказ.

Проблема в том, что я все еще получаю дубликаты идентификатора заказа, когда мне нужен только 1 идентификатор заказа, который является минимальной (датой) для разрешений на заказ ???

Спасибо

Ответы [ 5 ]

4 голосов
/ 20 августа 2010
WITH    q AS
        (
        SELECT  *, ROW_NUMBER() OVER (PARTITION BY OrderID ORDER BY Date) AS rn
        FROM    orderpermits
        )
SELECT  *
FROM    q
WHERE   rn = 1

Это гарантированно вернет одну запись на OrderID, даже в случае связи на MIN(Date).

. Вы можете прочитать эту статью:

2 голосов
/ 20 августа 2010

Я думаю, что вы ищете это:

select op.Date, op.OrderID, op.opid
from (
    select OrderID, MIN(Date) AS MinDate 
    From OrderPermits  
    GROUP BY OrderId 
) opm
inner join OrderPermits op on opm.OrderID = op.OrderID 
    and opm.MinDate = op.Date
1 голос
/ 20 августа 2010

Вам необходимо указать предложение WHERE:

SELECT
   op.OrderID, op.id, op.Date
FROM
   dbo.OrderPermits op
WHERE
   op.Date = (SELECT MIN(op.Date) FROM dbo.OrderPermits WHERE OrderId = op.OrderId)
0 голосов
/ 20 августа 2010

Предполагая, что (кроме многократных возвратов) ваш запрос выполняет то, что вы хотите ...

select
op.OrderID,
op.id,
MIN(op.Date) AS Date
From OrderPermits op
Where op.Date = (Select Min(Date) from OrderPermits) // <-- Add this
GROUP BY
op.OrderID,
op.id,
MIN(op.Date) as Date

Хотя, если вы хотите, чтобы только одна запись возвращалась, вы также можете сделать:

Select op.OrderID,
  op.Id,
  op.Date
From OrderPermits op
Where op.Date = (Select MIN(Date) from OrderPermits)

Они оба по-прежнему будут возвращать несколько результатов, если несколько записей будут иметь общее значение MIN(Date).Я не знаю, возможно ли это с вашими данными или нет.

0 голосов
/ 20 августа 2010

Не могу попробовать сейчас, но не удаляем ли вы МИН (op.Date) из группы по предложению?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...