SQL返回Distinct列和distinct列的第一个日期

时间:2014-07-31 16:21:40

标签: sql postgresql aggregate-functions greatest-n-per-group

我有一个数据库,其中包含多个url和一个与created_at相关联的日期(url)。
我希望有类似的东西:

Select DISTINCT url, "the first date of this url"
from database
where blabala

我的问题是当一个日期添加到选择我得到这个:

/url/sdfsd  |   2014-07-19  
/url/sdfsd  |   2014-07-20  
/url/sdfsd  |   2014-07-25  

我想要的只是:

/url/sdfsd  |   2014-07-19

我意识到我过度简化了我的问题,但多亏了你们,我设法找到了解决方案

select req2.date, COUNT(DATE(req2.date)) as count
from (
    select hash_request -> 'PATH_INFO', min(DATE(created_at)) as date
        from (
            select *
            from request_statistics
            where LOWER(hash_request -> 'HTTP_USER_AGENT') LIKE '%google%'
         ) req1
    group by hash_request -> 'PATH_INFO'
     )  req2
group by req2.date
order by req2.date asc

我很难将所有唯一网址上的日期分组。现在我有,每天所有独特网址的唯一网址数量

4 个答案:

答案 0 :(得分:5)

记录是否排序?

select url, min(created_at)
from databaseTable
where blabala
group by url

答案 1 :(得分:0)

如果您还想要其他字段,那么distinct on语法可能就是您想要的:

Select DISTINCT ON (url) d.*
from database d
where blabala
order by url, created_at asc;

答案 2 :(得分:0)

你能用“LIMIT”只返回一行吗?

SELECT url, created_at FROM table WHERE blablabla LIMIT 1

您也可以使用ORDER BY选择最早或最近的日期。

以下是有关LIMIT

的更多信息

答案 3 :(得分:0)

distinct的问题是它返回一个不同的行。因此,当您有多个记录时,除了日期之外它们都是相同的,因为日期不同(即整个记录与其他记录不同)。所以基本上你可以使用Gordon建议的distinct on方法或Conffusion建议的min方法。我个人的偏好是distinct on。它更健壮。