SQL:where 子句或类似子句中的变量值?
SQL: variable values inside of a where clause, or similar?
情况:
试图在雇用后 90 天和雇用后 1 年获得员工的工资。
我一直在尝试这样的事情:
SELECT payrate
FROM dbo.table
WHERE (table.checkdate BETWEEN table.startdate +90 AND table.startdate +97)
我知道以上内容远非有效,但这只是一个简单的例子。
我想我需要 +90 和 +97,因为检查每周进行一次,可能不会恰好在第 90 天。
我猜您正在使用 SQL 服务器。这是一种方法:
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);
用于标识每个员工的列的 ?
。
标记第一个答案。
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)
)
一年用 365 和 372 替换 90 和 97。
这是假设在 90 天的日期范围内每条记录只有一个 check/payrate。
情况: 试图在雇用后 90 天和雇用后 1 年获得员工的工资。
我一直在尝试这样的事情:
SELECT payrate
FROM dbo.table
WHERE (table.checkdate BETWEEN table.startdate +90 AND table.startdate +97)
我知道以上内容远非有效,但这只是一个简单的例子。
我想我需要 +90 和 +97,因为检查每周进行一次,可能不会恰好在第 90 天。
我猜您正在使用 SQL 服务器。这是一种方法:
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);
用于标识每个员工的列的 ?
。
标记第一个答案。
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)
)
一年用 365 和 372 替换 90 和 97。
这是假设在 90 天的日期范围内每条记录只有一个 check/payrate。