0

我有两张桌子

表首字母

EnId  DateSeen
1     2013-05-01
4     2013-05-06
7     2013-05-01
13    2013-05-09
17    2013-05-09

表跟进

EnId  FId     DateSeen
1      1      2013-05-04
1      2      2013-05-05
1      3      2013-05-06
4      1      2013-05-09
4      2      2013-05-010
7      1      2013-05-02
13     1      2013-05-011
13     2      2013-05-014
13     3      2013-05-016
13     4      2013-05-019

我想为上面的两个表编写一个联合,以输出一个特定的“EnId”的最新条目,如下所示。

结果表我想像下面

EnId   FId      DateSeen
1       3       2013-05-06
4       2       2013-05-010
7       1       2013-05-02
13      4       2013-05-019
17    <null>    2013-05-09

我的 sql 代码是

select EnId, FId, DateSeen  from tableFollowup
WHERE DateSeen =(Select MAX(DateSeen) FROM TableFollowup)

UNION
select EnId, '' AS FId, DateSeen  from tableInitial
GROUP BY EnId

但我似乎得到的是最新的 TableInitial 和最新的 TableFollowup

EnId   FId      DateSeen
1    <null>     2013-05-01
1       3       2013-05-06
4    <null>     2013-05-06
4       2       2013-05-010
7    <null>     2013-05-01
7       1       2013-05-02
7       1       2013-05-02
13    <null>    2013-05-09
13      4       2013-05-019
17    <null>    2013-05-09

我想我错过了一些东西,但无法让它工作。谢谢

4

3 回答 3

0

调整您的查询:

select EnId, FId, DateSeen  from tableFollowup t1
WHERE DateSeen =(Select MAX(t2.DateSeen) FROM tableFollowup t2 WHERE t2.EnId = t1.EnId)
UNION
select EnId, '' AS FId, DateSeen  from tableInitial
Where EnId not in (Select enid from tableFollowup)
GROUP BY EnId
于 2013-07-01T09:29:06.083 回答
0

如果 Fid 总是递增,您可以使用如下解决方案:

SELECT EnID, MAX(FId), MAX(DateSeen)
FROM (
  SELECT EnID, Null AS FId, DateSeen
  FROM TableInitial
  UNION ALL
  SELECT EnId, FId, DateSeen
  FROM TableFollowup
) s
GROUP BY EnID

在此处查看小提琴。或者您也可以将其用作子查询:

  SELECT EnID, Null AS FId, DateSeen
  FROM TableInitial
  UNION ALL
  SELECT EnId, MAX(FId), MAX(DateSeen)
  FROM TableFollowup
  GROUP BY EnID

(可能会更快)

于 2013-07-01T09:35:10.727 回答
0

这应该会按照您的要求为您提供准确的结果。它也将消除任何重复。

SELECT MAX(DateSeen), MAX(FId), EnId FROM (select EnId, FId, DateSeen  from tableFollowup
UNION
select EnId, NULL AS FId, DateSeen from tableInitial) dt GROUP BY EnId
于 2013-07-01T09:46:39.130 回答