繁体   English   中英

多个语句以选择不同的行

[英]multiple statements to select distinct rows

我对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

假设您的架构如下: -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

您可以使用内部查询轻松完成此操作。 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)

我写了一个查询简单地使用分组依据,并具有最大日期,但失败了。然后,我在Google select group by having max写入了这些单词,并找到了结果。 这是一个示例指南,可帮助您快速解决此类问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM