SQL“分组依据”问题 - 我无法选择每一列

时间:2009-02-17 10:54:14

标签: sql group-by

我有一个数据库,其中每一行都有一个id,一个URL和一个XML。 ID是唯一的,但URL列可以有重复项。 我需要所有的URL,没有重复,并且对于每个URL,我需要id和XML。

如果我只询问URL和Id,我使用以下查询:

select URL, max(ID) as ID from T1 group by URL

一切都很好。

但是当我还想要XML时,我使用以下查询:

select URL, max(ID) as ID, XML from T1 group by URL

我收到以下错误:

ISC ERROR CODE:335544569
ISC ERROR MESSAGE:
Dynamic SQL Error
SQL error code = -104
user name required

我做错了什么?

谢谢,

Dikla

感谢您的回答。我想补充说明:
如果有重复的URL,我不关心将返回哪些URL。 但是我需要让它们没有重复,即使行之间的XML不同。 有可能吗?
谢谢!

4 个答案:

答案 0 :(得分:4)

select id, url, xml
from table1
where id in (
    select min(id)
    from table1
    group by url)

会为您提供删除了重复网址的行(并且只包含重复网址的第一个实例)

答案 1 :(得分:2)

你需要重新阅读你的问题并思考它。

您要求的URL(可以是重复的)但您不需要重复,并且您还需要ID(不重复)。样本数据:

1,http://www.google.com
2,http://www.yahoo.com
3,http://www.google.com

在这种情况下,您想要返回什么,请记住谷歌有多个ID?

XML也是如此。如果它对于给定的URL不是唯一的,您需要指定如何只为每个URL获取一个条目,这就是您的查询不起作用的原因。

答案 2 :(得分:0)

您没有对列XML执行聚合函数,您必须将其包含在您的组中。

请记住,如果每一行的数据都不相同,那么它实际上无法进行分组,您将无法获得所需的结果,所有这些都是您向数据库询问的结果:)。 / p>

答案 3 :(得分:0)

select urlMaxId.id, urlMaxId.url, table1.html from (select url, max(id) id from table1 group by url) urlMaxId inner join table1 on urlMaxId.id = table1.id