我有以下访问查询,我需要在mssql中运行:
SELECT
[PUB_op-mstr].[om-job],
Last([PUB_op-mstr].[om-emp]) AS [LastOfom-emp],
Max([PUB_op-mstr].[om-dt-end]) AS [MaxOfom-dt-end],
[PUB_op-mstr].[om-wkctr]
FROM
PUB_wc_mstr INNER JOIN [PUB_op-mstr]
ON
PUB_wc_mstr.wc_wkctr = [PUB_op-mstr].[om-wkctr]
GROUP BY
[PUB_op-mstr].[om-job],
[PUB_op-mstr].[om-wkctr],
PUB_wc_mstr.wc_dept
HAVING
(((Max([PUB_op-mstr].[om-dt-end]))>=Date()-7
And
(Max([PUB_op-mstr].[om-dt-end]))<Date())
AND ((PUB_wc_mstr.wc_dept)="633" Or (PUB_wc_mstr.wc_dept)="646"));
答案 0 :(得分:1)
MS SQL不支持LAST
聚合函数。所以,你可以用Min / Max替换它。或者您已经编写了自己的SELECT
喜欢
[LastOfom-emp] = (SELECT ...
答案 1 :(得分:1)
LAST()
给出了您正在查找的列的最后一个元素。
示例:T1
有一列c1
,其中包含:
one
two
three
声明:
SELECT LAST(c1) FROM T1
给出:三个
将此函数移植到SQL Server是可行的,但只有在表中存在(至少)一个已排序列时才可以。要获取列的最后一个元素,您必须执行以下操作:
SELECT TOP(1) c1 FROM T1 ORDER BY c1 DESC;
这会给你错误的结果,即“两个”(因为列没有排序)。因此,要在这种情况下找到正确答案,您需要另一列,例如递增ID
c1 c2
one 1
two 2
three 3
现在你可以:
SELECT TOP(1) c1 FROM T1 ORDER BY c2 DESC;
由于c2已排序,您现在可以得到结果“三”。
答案 2 :(得分:1)
假设Last([PUB_op-mstr].[om-emp])
是最大om-emp
的{{1}}值,请尝试:
om-dt-end