2016-06-13 1 views
0

У меня есть таблица что-то вроде этогонужно искать имя только один раз, даже если он приходит в 2 разных датах

работника

+--------+-------+-------------+ 
| Worker | Lotid | date  | 
+--------+-------+-------------+ 
| ABC | 1234 | 2016-11-06 | 
| ABC | 1234 | 2016-11-06 | 
| ABC | 1234 | 2016-12-06 | 
| XYZ | 1235 | 2016-12-06 | 
+--------+-------+-------------+ 

Я бег этого вопроса:

SELECT Max (worker) AS worker, 
     lotid, 
     Min (trsdate) AS date 
FROM worker 
WHERE trsdate BETWEEN '2016-11-06' AND '2016-11-06' 
GROUP BY lotid 

И я получаю выход.

+-----+------+------------+ 
| ABC | 1234 | 2016-11-06 | 
+-----+------+------------+ 

И когда работает один и тот же запрос с: trsdate between '2016-12-06' and '2016-12-06'

я получаю выход в

+-----+------+------------+ 
| ABC | 1234 | 2016-12-06 | 
+-----+------+------------+ 
| XYZ | 1235 | 2016-12-06 | 
+-----+------+------------+ 

Но то, что я хочу достигнуть, когда мы посчитаем LotID раз это не должно снова в разное время, как это происходит на 1234 год, он вводится 2 раза в 2 разные даты, поэтому, когда я ищу 2016-11-06, чем его правильно, но когда я ищу 2016-12-06, он снова возвращается к тому же.

+0

Я использую MSSQL –

ответ

1

Ваша группировка должна произойти до того, как вы ограничите свои результаты своим предложением where. Запрос ниже работ, как и ожидалось:

SELECT worker 
    , lotid 
    , [date] 
FROM (SELECT Max (worker) AS worker, 
      lotid, 
      Min (trsdate) AS [date] 
     FROM worker 
     GROUP BY lotid) temp 
WHERE date between '2016-12-06' and '2016-12-06' 

Результат:

worker lotid date 
XYZ  1235 2016-12-06 00:00:00.000 
+0

Его рабочий спасибо !!!!! –