标记第一次在表中显示值

时间:2015-02-21 15:25:47

标签: mysql

我有一个带引荐的表格:

`date       | referrer             | new?
2015-01-01  example.com/link.php  
2015-01-02  example.com/link.php
2015-01-03  example.com/link.php
2015-01-01  someotherlink.com
2015-01-03  someotherlink.com`

现在我想将字段new设置为true,如果它是引用者的第一个出现。

`date       | referrer             | new?
2015-01-01  example.com/link.php    true
2015-01-02  example.com/link.php
2015-01-03  example.com/link.php
2015-01-01  someotherlink.com       true
2015-01-03  someotherlink.com`

该表每天更新,我第一次有更大的时间表,我想标记第一次出现。

有什么想法吗?对于每日更新,我可以在表中输入之前检查引用者是否已经存在,但我认为有一个SQL语句可以对表中的所有值执行此操作,并且我在更新表后每天只运行一次。

1 个答案:

答案 0 :(得分:0)

您可以使用变量。在select中,这看起来像:

select referrer, date,
       (if(@r = referrer, 0,
           if(@r := referrer, 1, 1)
       ) as newflag
from referrers r cross join
     (select @r := '')
order by referrer, date;

如果您希望永久更新列,可以执行以下操作:

update referrers r left join
       (select referrer, min(date) as mindate
        from referrers
        group by referrer
       ) rr
       on rr.referrer = r.referrer and r.date = rr.mindate
    r.isnew = (rr.referrer is not null);

这假定每个推荐人的日期是唯一的 - 或者至少是最短的日期。