首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >每个id的MySQL编号日期

每个id的MySQL编号日期
EN

Stack Overflow用户
提问于 2013-08-07 11:56:24
回答 3查看 71关注 0票数 1

我的问题可能很容易回答(很抱歉),但我找不到解决办法。

我有一张这样的桌子:

代码语言:javascript
复制
id / date  
1 / 2013-5-5 13:44:12  
1 / 2013-5-5 15:34:19  
1 / 2013-6-5 05:14:07  
2 / 2012-3-4 06:33:33  
2 / 2013-5-5 12:23:10  
3 / 2012-5-7 11:43:17   

我想要的是:

代码语言:javascript
复制
id / date / position  
1 / 2013-5-5 13:44:12 / 1    
1 / 2013-5-5 15:34:19 / 2  
1 / 2013-6-5 05:14:07 / 3   
2 / 2012-3-4 06:33:33 / 1   
2 / 2013-5-5 12:23:10 / 2   
3 / 2012-5-7 11:43:17 / 1  

因此,每个id的最早日期应该是位置1,第二位,最早的2等等。如何在MySQL中创建职位列?

非常感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-07 12:04:55

不幸的是,MySQL没有为数据分配行号的窗口函数。但是有几种方法可以获得结果,您可以使用类似于以下的子查询返回这个职位编号:

代码语言:javascript
复制
select t.id,
  t.date,
  (select count(*)
   from yourtable r
   where r.id = t.id
     and r.date <= t.date) position
from yourtable t
order by t.id, t.date;

与Demo

还可以实现用户定义的变量:

代码语言:javascript
复制
select id, date, position
from
(
  select t.id,
    t.date,
    @row:=case 
            when @prev=t.id and @pd<= t.date
            then @row else 0 end +1 position,
    @prev:=t.id,
    @pd:=t.date
  from yourtable t
  cross join (select @row:=0, @prev:=0, @pd:=null) c
  order by t.id, t.date
)d

请参阅与Demo

票数 3
EN

Stack Overflow用户

发布于 2013-08-07 12:07:24

你可以使用会话变量,但我很感情用事;我喜欢慢慢来的老式方法.

代码语言:javascript
复制
 SELECT x.*
      , COUNT(*) rank 
   FROM my_table x 
   JOIN my_table y 
     ON y.id = x.id 
    AND y.date <= x.date 
  GROUP 
     BY id,date;
票数 1
EN

Stack Overflow用户

发布于 2013-08-07 12:06:06

计算每个日期以下的行数:

代码语言:javascript
复制
UPDATE
    `table`
SET
    position = 
    (
        SELECT
            COUNT(1) + 1
        FROM
            `table` t
        WHERE
            t.`date` < `table`.`date`
            AND t.id = table.id
        ORDER BY
            `date`
    )

SQL Fiddle (只选择可用,但它是相同的)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18102750

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档