SQL: значения переменных внутри предложения where или аналогичные? - PullRequest
0 голосов
/ 10 мая 2018

Ситуация: Попытка получить зарплату сотрудника через 90 дней после найма и через 1 год после найма.

Я пробовал что-то вроде этого:

SELECT payrate
FROM dbo.table
WHERE (table.checkdate BETWEEN table.startdate +90 AND table.startdate +97)

Я знаюПриведенное выше далеко не верно, но это лишь быстрый пример.

Мне кажется, мне нужны +90 и +97, потому что проверки выполняются еженедельно и могут не выпасть точно на 90-й день.

Ответы [ 2 ]

0 голосов
/ 10 мая 2018

Пометка на первый ответ.

SELECT t.employeeid, t.payrate
FROM dbo.table t
WHERE (
  --GET CHECKS BETWEEN THE 90 AND 97 DATE RANGE
  t.checkdate >= dateadd(day, 90, t.startdate) 
  AND
  t.checkdate <= dateadd(day, 97, t.startdate) 
)

В течение одного года замените 90 и 97 на 365 и 372.

Это предполагает, что для каждой записи существует только один чек / выплатав этом диапазоне дат 90 дней.

0 голосов
/ 10 мая 2018

Я предполагаю, что вы используете SQL Server.Вот один из методов:

SELECT TOP (1) WITH TIES payrate
FROM dbo.table t
WHERE t.checkdate >= dateadd(day, 90, t.startdate)
ORDER BY ROW_NUMBER() OVER (PARTITION BY ? ORDER BY t.startdate);

? для столбца, идентифицирующего каждого сотрудника.

...