我有一个带引荐的表格:
`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语句可以对表中的所有值执行此操作,并且我在更新表后每天只运行一次。
答案 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);
这假定每个推荐人的日期是唯一的 - 或者至少是最短的日期。