返回独立于其他列的列的最大日期

0kjbasz6  于 2022-10-22  发布在  其他
关注(0)|答案(1)|浏览(199)

我有两张这样的table:
客户端表(让我们将其命名为ClientTable)

联系人ID姓名电子邮件
001约翰johnemail01@gmail.com
002玛丽亚mariaemail02@gmail.com
003卡洛斯carlosemail03@gmail.com
004帕特丽夏patriciaemail04@gmail.com

Travels Table(让我们将其命名为TravelTable)

ContactIDTripDate国家/地区
0012022-10-18德国
0032022-02-05加拿大
0012022-03-07欧洲
0022022-07-02印度
0042022-01-28奥地利
0032022-01-28墨西哥

我需要的是赶上约翰最近的一次旅行(去德国),不管他去过哪个国家。我的SQL是这样写的:

  1. SELECT DISTINCT a.ContactID, a.Name, a.Email, MAX(b.TripDate) AS 'LastTrip', b.Country
  2. FROM ClientTable a WITH (NOLOCK)
  3. LEFT JOIN TravelTable b ON a.ContactID = b.ContactID
  4. WHERE a.ContactID IS NOT NULL AND a.Email IS NOT NULL
  5. GROUP BY a.ContactID, a.Name, a.Email, b.Country

问题是我得到了这个输出:

  1. | ContactID | Name | Email | LastTrip | Country |
  2. | --------- | ---- | --------------------- | ---------- | ------- |
  3. | 001 | John | johnemail01@gmail.com | 2022-10-18 | Germany |
  4. | 001 | John | johnemail01@gmail.com | 2022-03-07 | EUA |

我真的很难接受这一次,我不明白我为什么不去做,只是为了得到约翰的最后一次旅行。
提前谢谢。

nszi6y05

nszi6y051#

您可以使用子查询获取MAX日期:

  1. SELECT
  2. a.ContactID,
  3. a.Name,
  4. a.Email,
  5. b.TripDate AS 'LastTrip',
  6. b.Country
  7. FROM ClientTable a WITH (NOLOCK)
  8. LEFT JOIN TravelTable b ON a.ContactID = b.ContactID
  9. WHERE a.ContactID IS NOT NULL
  10. AND a.Email IS NOT NULL
  11. AND b.TripDate = (SELECT MAX(c.TripDate)
  12. FROM TravelTable c)

结果:

  1. | ContactID | Name | Email | LastTrip | Country |
  2. |-----------|------|-----------------------|------------|---------|
  3. | 1 | John | johnemail01@gmail.com | 2022-10-18 | Germany |

小提琴。

展开查看全部

相关问题