多个语句来选择不同的行

时间:2013-10-16 06:25:11

标签: mysql sql

我对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)上输入了其他多个行。我不确定如何添加更多代码,然后只显示剩余的多行中的一行。

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

任何帮助将不胜感激。如果我能在此期间自己回答这个问题,我会发布答案

谢谢,肖恩

这个帖子接近我要问的问题,但我发现答案令人困惑。

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

您可以使用内部查询轻松完成。 Sql Fiddle Demo

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)

我使用简单的分组编写了一个查询并且具有最大日期但是失败然后我在Google select group by having max中写了这些单词并找到了结果。这是一个快速修复此类问题的示例指南