2

我对 SQL 完全陌生。我有一个包含多行相同 ID(Alpha_code)的表。

我想查询此表以仅为每个 Alpha_code 提供 1 行。

如果在不同的(contact_date)上添加了行,我需要它首先选择最新的行。

我发现下面的语句没有问题。

SELECT m.*
    FROM (SELECT Alpha_code, max(Contact_date) AS MaxDate FROM contactsNTH GROUP BY Alpha_code)  
    AS mm INNER JOIN contactsNTH AS m ON (mm.MaxDate = m.Contact_Date) AND (mm.Alpha_code = m.Alpha_code)

但是,在同一 (contact_date) 上输入了其他多行。我不确定如何添加更多代码,然后只显示剩余的多行中的 1 行。

我已经尝试过 Select Distinct 语句,但它没有用。

任何援助将不胜感激。如果我同时可以自己回答这个问题,我会发布答案

谢谢,肖恩

该线程与我的要求接近,但我发现答案令人困惑。

如何根据多个字段选择不同的行 4

4

2 回答 2

1

假设您的架构如下所示:- http://sqlfiddle.com/#!2/4e6ff/2

您可以使用以下查询

SELECT c1.Alpha_code,c1.Contct_date from contactsNTH as c1
LEFT JOIN 
contactsNTH as c2 
ON
c1.Alpha_code = c2.Alpha_code 
AND
(c1.Contct_date > c2.Contct_date) group by c1.Alpha_code

此查询在标准 SQL 中不起作用,因为它说:“包含 GROUP BY 子句的查询不能引用选择列表中未在 GROUP BY 子句中命名的非聚合列”

尝试使用此查询

SELECT c1.Alpha_code,MAX(c1.Contct_date) as contact_date from contactsNTH as c1
LEFT JOIN 
contactsNTH as c2 
ON
c1.Alpha_code = c2.Alpha_code 
AND
(c1.Contct_date > c2.Contct_date) group by c1.Alpha_code

两者都将提供相同的结果http://sqlfiddle.com/#!2/4e6ff/4

于 2013-10-16T06:37:24.433 回答
0

您可以使用内部查询轻松完成。Sql 小提琴演示

SELECT Alpha_code, Contact_date AS MaxDate FROM contactsNTH AS t WHERE
Contact_date = (SELECT MAX(Contact_date) FROM contactsNTH
WHERE Alpha_code=t.Alpha_code)

我使用简单的 group by 并具有最大日期编写了一个查询,但它失败了然后我在 google 中写了这些词select group by having max并找到了结果。这是一个示例指南,可让您快速解决此类问题

于 2013-10-17T07:08:22.297 回答