[英]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.