Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 选择按组排序的最新条目,为最新条目添加用户定义的列_Sql_Sql Server - Fatal编程技术网

Sql 选择按组排序的最新条目,为最新条目添加用户定义的列

Sql 选择按组排序的最新条目,为最新条目添加用户定义的列,sql,sql-server,Sql,Sql Server,我目前有两个SQL表: Employees ID Created RecordID Status ------ ----------------------- ------------ ---------- 1 2020-07-29 12:38:54.070 1 1 2 2020-08-03 14:28:59.803 1 1 3 2020-08-04 13:47:49.427

我目前有两个SQL表:

Employees
ID     Created                 RecordID     Status
------ ----------------------- ------------ ----------
1      2020-07-29 12:38:54.070 1            1
2      2020-08-03 14:28:59.803 1            1
3      2020-08-04 13:47:49.427 2            0

如何在下面的查询中添加另一个名为
Latest
的(用户定义)列,该列可以检查该行是否对应于创建了最新
的员工
RecordID
编号,并为该行返回字符串
true
false
值?换句话说,如果一行创建的
具有与该
RecordID
编号对应的所有行的最新时间戳,则该行应为
Latest:true

以下是我迄今为止的SQL:

SELECT e.ID, e.Created, e.Status, p.EmployeeID, p.Amount
FROM Employees AS e
JOIN Payments AS p 
ON e.ID = p.EmployeeID
以下是预期结果:

ID     Created                     Status     EmployeeID     Amount     Latest
------ --------------------------- ---------- -------------- ---------- ----------
1      2020-07-29 12:38:54.070     1          1              1022       false
1      2020-07-29 12:38:54.070     1          1              1090       false
1      2020-07-29 12:38:54.070     1          1              2105       false
2      2020-08-03 14:28:59.803     1          2              1112       true
2      2020-08-03 14:28:59.803     1          2              1450       true
2      2020-08-03 14:28:59.803     1          2              2923       true
3      2020-08-04 13:47:49.427     0          3              1064       true

谢谢

两名员工可以拥有相同的
RecordID
我对期望的结果感到困惑。“最新记录”是雇员表中的最高记录ID吗?付款表中的最高ID?你怎么知道仅仅因为身份证就有最新的付款?(例如,事务可以按顺序提交。)您是否希望有6行、2行、1行或其他内容?请告诉我们您期望的结果,这比反向工程一个单词问题要容易得多。此外,SQL Server没有布尔类型,最好是位(
0
/
1
/
null
)或字(字面上是字符串
'true'
/
'false'
)。如何识别最新记录?以及它与付款表的关系,因为您仅使用员工id加入?请您添加预期结果并进行更多解释。逻辑不够清晰。请为您的示例添加预期结果。最新付款是创建了最新的
的员工
记录ID
。请参阅编辑的问题这就是为什么依赖单词问题并假设我们都熟悉您的数据模型会使问题难以回答的原因。这不是“最新付款”,而是“最新创建的员工”。如果您更改了实体名称以试图掩盖问题,则会产生相反的效果。
;WITH x AS 
(
  SELECT e.ID, e.Created, e.Status, p.EmployeeID, p.Amount,
    Latest = CASE DENSE_RANK() OVER (PARTITION BY e.RecordID ORDER BY e.Created DESC) 
      WHEN 1 THEN 'true' ELSE 'false' END
  FROM dbo.Employees AS e
  JOIN dbo.Payments AS p 
  ON e.ID = p.EmployeeID
)
SELECT * FROM x ORDER BY ID; 
;WITH x AS 
(
  SELECT e.ID, e.Created, e.Status, p.EmployeeID, p.Amount,
    Latest = CASE DENSE_RANK() OVER (PARTITION BY e.RecordID ORDER BY e.Created DESC) 
      WHEN 1 THEN 'true' ELSE 'false' END
  FROM dbo.Employees AS e
  JOIN dbo.Payments AS p 
  ON e.ID = p.EmployeeID
)
SELECT * FROM x ORDER BY ID;