Member 10376393 Ответов: 1

Sql select query отфильтровать некоторые даты


First-Last-ID Exit_Date
Ян Клаас 5656 1-1-1900
Ян Клаас 5656 1-1-1900
Ян Клаас 5656 25-12-2017
Питер Вакансии 1223 1-1-1900
Марк Малдер 4456 24-6-2017
Тейлор Малдер 1235 30-11-2017
Большой Эл 4567 1-1-2017
Большой Эл 4567 30-10-2017
Большой Эл 4567 5-1-2017
Майк Малдер 1232 30-8-2017

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

проблема в том, что пользователь может иметь более одной записи. 1-1-1900 используется в базе данных для бесконечности. Пользователь Big Al имеет одну дату выхода в будущем. Я хочу получить от него последнее свидание 30-10-2017. У Яна Клааса есть два бесконечных свидания, которые мне не нужны.
У Марка Малдера есть свидание в прошлом.

First-Last-ID Exit_Date
Тейлор Малдер 1235 30-11-2017
Большой Эл 4567 30-10-2017
Майк Малдер 1232 30-8-2017

Что я уже пробовал:

я пробовал некоторые select и group query, но я не мастер SQL, если кто-то может помочь или указать мне правильное направление.

1 Ответов

Рейтинг:
0

David_Wimbley

Возможно, я не понимаю, но это звучит так: если у кого-то есть дата 1/1/1900, вы не хотите их видеть, что должно устранить Яна класса правильно?

Ради этого примера я игнорирую столбец ID, поскольку он, по-видимому, не имеет значения в приведенном вами примере.

DECLARE @ExitTable TABLE (
	FirstName varchar(200) NULL,
	LastName VARCHAR(25) NULL,
	Exit_Date DATETIME NULL
);

INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Jan', -- FirstName - varchar(200)
          'Klass', -- LastName - varchar(25)
          '1-1-1900'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Jan', -- FirstName - varchar(200)
          'Klass', -- LastName - varchar(25)
          '1-1-1900'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Jan', -- FirstName - varchar(200)
          'Klass', -- LastName - varchar(25)
          '12-25-2017'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Peter', -- FirstName - varchar(200)
          'Jobs', -- LastName - varchar(25)
          '1-1-1900'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Mark', -- FirstName - varchar(200)
          'Mulder', -- LastName - varchar(25)
          '6/24/2017'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Taylor', -- FirstName - varchar(200)
          'Mulder', -- LastName - varchar(25)
          '11/30/2017'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Mike', -- FirstName - varchar(200)
          'Mulder', -- LastName - varchar(25)
          '8/30/2017'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Big', -- FirstName - varchar(200)
          'AL', -- LastName - varchar(25)
          '1-1-2017'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Big', -- FirstName - varchar(200)
          'AL', -- LastName - varchar(25)
          '10/30/2017'-- Exit_Date - datetime
          )
INSERT INTO @ExitTable( FirstName, LastName, Exit_Date )
VALUES  ( 'Big', -- FirstName - varchar(200)
          'AL', -- LastName - varchar(25)
          '1/5/2017'-- Exit_Date - datetime
          )


SELECT * FROM @ExitTable AS A WHERE 
CAST(A.Exit_Date AS DATE) > CAST('7/29/2017' AS DATE) --7/29 can be swapped out for GETDATE()
AND NOT EXISTS (SELECT * FROM @ExitTable AS B WHERE CAST(B.Exit_Date AS DATE) = CAST('1/1/1900' AS DATE) AND B.FirstName = A.FirstName AND B.LastName = A.LastName)


Не существует исключает любую запись где они могут иметь запись 1/1/1900

Ожидаемый результат должен быть

Taylor	Mulder	2017-11-30 00:00:00.000
Mike	Mulder	2017-08-30 00:00:00.000
Big	AL	2017-10-30 00:00:00.000


Member 10376393

Спасибо Дэвиду за Ваш быстрый ответ в тот момент, когда у меня нет доступа к компьютеру на моей работе, чтобы попробовать его. Я сделаю это завтра, Спасибо за вашу помощь в любом случае!!

Я не знаю, Могу ли я игнорировать столбец ID в базе данных около 1000 записей, я не знаю, каково будет изменение, если будет более одного "Яна Клааса" с другим идентификатором, представляющим другого человека.

David_Wimbley

Я проигнорировал удостоверение только потому, что был ленив. Вы можете поменять местами B.FirstName = A.FirstName and B.LastName = A.LastName с A.Id = B.Id и это должно, теоретически, позаботиться о ситуации, когда есть 2 уникальных Яна Клааса с разными идентификаторами.