更新语句使用Max Date和userid作为条件

时间:2014-06-07 01:29:15

标签: mysql sql maxdate

所以我正在尝试更新合同表,其中合同开始日期是最新日期和相关员工ID。合同表存储有关该员工的所有过去信息。

例如

contract_tbl
+------------+------------+--------------------+-----------------+---------------+
|Contractid  |EmployeeId  |ContractStartDate   |ContractEndDate  | Position      |
+------------+------------+--------------------+-----------------+---------------+
|   1        |   1        |  2012-12-13        |  2013-12-12     |  Data Entry   |
+------------+------------+--------------------+-----------------+---------------+
|   2        |   1        |  2014-01-26        |  2015-01-25     |  Data Entry   |
+------------+------------+--------------------+-----------------+---------------+
|   3        |   2        |  2014-01-26        |  2015-01-25     |  Data Entry   |
+------------+------------+--------------------+-----------------+---------------+

这是我拥有的SQL,但它不起作用。 (使用mysql db)

UPDATE contract_tbl 
SET Position='Data Analyst' 
WHERE EmployeeId = 1 And ContractStartDate= (
  select max(ContractStartDate 
  FROM contract_tbl))

因此它应该使用位置列中的Data Analyst更新上面显示的第二行,但是我收到错误。

有人知道如何解决这个问题吗?

提前致谢

2 个答案:

答案 0 :(得分:-1)

可能这就是你想要的:

UPDATE contract_tbl c1
SET Position='Data Analyst' 
WHERE EmployeeId = 1 And ContractStartDate= (
  SELECT max(ContractStartDate)
  FROM contract_tbl c2
  WHERE c2.EmployeeId = c1.EmployeeId
)

答案 1 :(得分:-1)

这也可以:

UPDATE contract_tbl a
JOIN (
  SELECT MAX(ContractStartDate) m
  FROM contract_tbl
  WHERE EmployeeId = 1) b ON a.ContractStartDate = b.m AND a.EmployeeId = 1
SET a.Position='Data Analyst';