Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
越来越多的月份过去了-MySQL_Mysql_Sql - Fatal编程技术网

越来越多的月份过去了-MySQL

越来越多的月份过去了-MySQL,mysql,sql,Mysql,Sql,我想创建下面描述的MonthCount列。我已经创建了ID和Date字段。我只是想不出一个聪明的方法来计算已经过去的日期。日期总是一个月的第一个月,但是第一个月可以是一月到十二月之间的任何月份 ID Date MonthCount 1 1/2016 1 1 2/2016 2 1 3/2016 3 2 5/2015 1 2 6/2015 2 2 7/2015 3 似乎我记得在什么地方读到过关于使用>或

我想创建下面描述的MonthCount列。我已经创建了ID和Date字段。我只是想不出一个聪明的方法来计算已经过去的日期。日期总是一个月的第一个月,但是第一个月可以是一月到十二月之间的任何月份

ID    Date    MonthCount
1     1/2016  1 
1     2/2016  2
1     3/2016  3
2     5/2015  1
2     6/2015  2
2     7/2015  3

似乎我记得在什么地方读到过关于使用>或<运算符将表连接到自身的内容,但我无法完全回忆起该方法。

在MySQL中处理此问题的最佳方法是使用变量:

  select t.*,
         (@rn := if(@id = id, @rn + 1,
                    if(@id := id, 1, 1)
                   )
         ) as rn
  from t cross join
       (select @rn := 0, @id := -1) params
  order by id, date;

看起来您正在寻找:

select a.id, a.date, b.mindate
from table as a
inner join (
    select id, min(date) as mindate
    from table
    group by id
) as b on (a.id=b.id)
这会给你

ID    Date    mindate
1     1/1/2016  1/1/2016
1     1/2/2016  1/1/2016
1     1/3/2016  1/1/2016
2     1/5/2015  1/5/2015
2     1/6/2015  1/5/2015
2     1/7/2015  1/5/2015

现在,你的家庭作业是弄清楚如果你要投反对票,如何计算两个日期之间的时间间隔。我想知道原因。声明的副本不合适,因为行号没有分区。@GordonLinoff。。op应该能够从这些答案中的一个得到一个查询。@vkp如果以前有人问过这个问题,我非常乐意阅读另一个答案。如果有链接,我将不胜感激,因为我一直在搜索,我找到的唯一结果是找到两个日期之间的月数。谷歌
行数mysql
将为您提供100个指向SO帖子的链接。谢谢,这让我找到了我需要去的地方。我没有考虑过这种方法。