Сравнить SQL выбрать и найти новые записи по дате - PullRequest
0 голосов
/ 13 июля 2020

У меня есть база данных, куда каждый день вставляется список сотрудников. Это SQL Server 2008. Так что, возможно, список тот же самый, но также может быть, что был добавлен новый сотрудник. У меня есть поле с временным интервалом дня из записи, имени и так далее. Вот простой выбор:

SELECT timestamp, number, rhyth 
FROM employees 
WHERE timestamp = '2020-07-13'

возвращает 853 строки

SELECT timestamp, number, rhyth 
FROM employees 
WHERE timestamp = '2020-07-10'

возвращает 850 строк

Как мне получить 3 строки, которые являются новыми между этими двумя датами ? "number" в данном случае является pkey.

Ответы [ 4 ]

1 голос
/ 13 июля 2020

Вероятно, проще всего было бы использовать IN:

SELECT timestamp, number, rhyth FROM employees 
WHERE timestamp = '2020-07-13'
  AND number NOT IN (SELECT number FROM employees WHERE timestamp = '2020-07-10')

Вы также можете использовать EXCEPT:

SELECT number FROM employees WHERE timestamp = '2020-07-13'
EXCEPT
SELECT number FROM employees WHERE timestamp = '2020-07-10'
1 голос
/ 13 июля 2020

используйте левое соединение, чтобы найти недостающие строки

    select * from
    (
      SELECT timestamp, number, rhyth FROM employees WHERE timestamp = '2020-07-13'
    )A left join 
    (
      SELECT timestamp, number, rhyth FROM employees WHERE timestamp = '2020-07-10'
    )B on A.number=b.number where b.number is null
0 голосов
/ 13 июля 2020

Если вы хотите найти сотрудников, которых раньше не было, используйте NOT EXISTS:

select *
from employees 
where not exists
(
  select null
  from employees before
  where before.number = exmployees.number
  and before.timestamp < employees.timestamp
)
and timestamp = '2020-07-13';

Remove

and timestamp = '2020-07-13'

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

Другой вариант:

select number, min(timestamp)
from employees
group by number
--having min(timestamp) = '2020-07-13';
0 голосов
/ 13 июля 2020

А как насчет неравенства?

SELECT timestamp, number, rhyth
FROM employees
WHERE timestamp > '2020-07-10' AND timestamp <= '2020-07-13'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...