我正在连接多个表,其中一个表具有与每个条目关联的时间戳。我正在使用此特定表来标识单个时间戳。
困难在于,在少数情况下,逻辑重复自身并且我得到重复记录,唯一的区别是时间戳。我正在寻找的是一种只返回最早时间戳的方法。
示例:
查询结构
Select Table1.ID, Table1.Timestamp, Table2.Text, Table3.text2
from Table3
left join table2
on Table2.id=Table3.id
left join table1
ON table2.id=table1.ID
where table1.text like '%From Group 1%'
输出示例当前
ID, Timestamp, Text, Text2
98, 2/4/2014, xxx, xxxx
99, 3/1/2014, xxxx, xxxx
99, 3/2/2014, xxx, xxxx <----Do not want 2nd Record
理想输出
ID, Timestamp, Text, Text2
98, 2/4/2014, xxx, xxxx
99, 3/1/2014, xxx, xxxx <---- Only 1 Record (earliest timestamp)
答案 0 :(得分:0)
您要在此处执行的操作是使用GROUP BY子句。您不能使用DISTINCT,因为您返回多个列,因此DISTINCT子句不会返回预期值。然后,您还需要添加一个ORDER BY语句,以便确保获得每个组的最早日期(指向table1.Ids集合的组)。
尝试这样的事情:
SELECT Table1.ID, Table1.Timestamp, Table2.Text, Table3.Text2
FROM Table3
LEFT JOIN Table2 ON Table2.ID = Table3.ID
LEFT JOIN Table1 ON Table2.ID = Table1.ID
WHERE Table1.Text LIKE '%From Group 1%'
GROUP BY Table1.ID // This will ensure only one appearance of each Table1 ID
ORDER BY Table1.Timestamp ASC // This will put the earliest timestamp first, so it will be the one appearance that is returned in the result set.
如果您需要我更深入地解释任何一个添加,请告诉我,因为这是一个非常棘手的查询。
修改强>
经过深思,DISTINCT子句可以在这里工作,因为你不希望任何列有任何重复值。所有你需要改变的是在SELECT之后添加关键字DISTINCT,你可以摆脱GROUP BY语句。保留ORDER BY语句是个好主意,因为您希望确保最早的时间戳是出现的时间戳。
SELECT DISTINCT Table1.ID, Table1.Timestamp, Table2.Text, Table3.Text2
FROM Table3
LEFT JOIN Table2 ON Table2.ID = Table3.ID
LEFT JOIN Table1 ON Table2.ID = Table1.ID
WHERE Table1.Text LIKE '%From Group 1%'
ORDER BY Table1.Timestamp ASC
如果您不熟悉DISTINCT条款,请参阅此处的更多信息。
答案 1 :(得分:0)
您可以使用SQL函数DISTINCT来选择不同的记录:
Select Distinct Table1.ID, Table1.Timestamp, Table2.Text, Table3.text2
from Table3
left join table2
on Table2.id=Table3.id
left join table1
ON table2.id=table1.ID
where table1.text like '%From Group 1%'
答案 2 :(得分:0)
根据您要查看的时间戳,您可以检索ID,文本和文本2的每个分组的第一个时间戳:
select
Table1.ID,
MIN(Table1.Timestamp) as TimeStamp,
Table2.Text,
Table3.Text2
from Table3
left join Table2
on Table2.ID=Table3.ID
left join Table1
on Table2.ID=Table1.ID
where Table1.Text like '%From Group 1%'
group by
Table1.ID,
Table2.Text,
Table3.Text2