【发布时间】:2020-06-07 22:05:38
【问题描述】:
我想从我的查询中获取基于date 的每个email 的最新记录。
此查询为每封电子邮件生成多条记录。我们将此输出称为表C。
我的问题是:如何从别名表C 中仅过滤最近的记录。
+-------------------+-----+------------+
| email | id | date |
+-------------------+-----+------------+
| hello@example.com | 123 | 2020-06-21 |
+-------------------+-----+------------+
| hello@example.com | 123 | 2020-06-15 |
+-------------------+-----+------------+
想要的结果是:
+-------------------+-----+------------+
| email | id | date |
+-------------------+-----+------------+
| hello@example.com | 123 | 2020-06-21 |
+-------------------+-----+------------+
我的起始查询(产生多条电子邮件记录)如下:
SELECT DISTINCT
Email,
ID,
Date
FROM [TABLE_A] AS a
LEFT JOIN (
select *
from [TABLE_B]
where ID = '123'
) AS b
ON a.Email = b.Key
我的尝试:
SELECT c.Email, c.ID, c.Date
FROM (
SELECT DISTINCT
Email,
ID,
Date
FROM [TABLE_A] AS a
LEFT JOIN (
select *
from [TABLE_B]
where ID = '123'
) AS b ON a.Email = b.Key
) AS c
INNER JOIN (
SELECT Email, max(Date) as MaxDate
FROM c
GROUP BY Email
) tm on c.Email = tm.Email and c.Date = tm.Date
看起来 SQL 无法“看到”表 C,因为我收到错误:
无效的对象名称
【问题讨论】:
-
ID是否保持不变,如您的示例数据所示?还是实际上应该根据每条记录更改? -
它将保持不变
-
那么你想要的只是
SELECT Email, ID, max(Date) FROM [TABLE_A] group by Email, ID -
啊,不。我的初始查询是我需要最新 (
email) 记录的查询。所以从那个查询中,我想过滤/选择基于date的最新记录 -
那么请用足够的样本数据和预期结果更新您的问题以解释您的意思,因为我显示的查询给出了您的要求。
标签: sql-server sql-server-2008 subquery