mysql - 根据某些其他行标准对排序日期进行编号
问题描述
我试图计算每次一行中的某个值在整个表格中发生的时间,正如人们可以看到的那样,我已经根据日期对表格进行了排序。
Campaign|Start Date|Phone Number
--------+----------+------------
A. |09/01/2018|555-444-3321
A. |09/02/2018|777-454-3333
A. |09/03/2018|555-444-3321
A. |09/04/2018|777-454-3333
A. |09/05/2018|555-444-3321
A. |09/06/2018|777-454-3333
A. |09/07/2018|555-444-3321
A. |09/08/2017|777-454-3333
期望的输出
Campaign|Start Date|Phone Number|Number of Occurrences within date
--------+----------+------------+---------------------------------
A. |09/01/2018|555-444-3321|1
A. |09/02/2018|777-454-3333|1
A. |09/03/2018|555-444-3321|2
A. |09/04/2018|777-454-3333|2
A. |09/05/2018|555-444-3321|3
A. |09/06/2018|777-454-3333|3
A. |09/07/2018|555-444-3321|4
A. |09/08/2017|777-454-3333|4
A. |09/08/2017|999-432-1111|1
解决方案
也许您需要为每个不同的电话号码计算一个行号。如果您有版本 8 或更高版本,则可以使用 row_number 函数。如果没有,您可以使用如下变量。
drop table if exists t;
create table t(Campaign varchar(2), StartDate date,PhoneNumber varchar(20));
insert into t values
('A.' ,STR_TO_DATE('09/01/2018','%m/%d/%Y'),'555-444-3321'),
('A.' ,STR_TO_DATE('09/02/2018','%m/%d/%Y'),'777-454-3333'),
('A.' ,STR_TO_DATE('09/03/2018','%m/%d/%Y'),'555-444-3321'),
('A.' ,STR_TO_DATE('09/04/2018','%m/%d/%Y'),'777-454-3333'),
('A.' ,STR_TO_DATE('09/05/2018','%m/%d/%Y'),'555-444-3321'),
('A.' ,STR_TO_DATE('09/06/2018','%m/%d/%Y'),'777-454-3333'),
('A.' ,STR_TO_DATE('09/07/2018','%m/%d/%Y'),'555-444-3321'),
('A.' ,STR_TO_DATE('09/08/2017','%m/%d/%Y'),'777-454-3333');
select *
from
(
select t.* ,
if(phonenumber <> @p, @occ:= 1,@occ :=@occ + 1) occurance,
@p:=phonenumber p
from t
cross join (select @occ:=0, @p:='') o
order by phonenumber,startdate
) s
order by startdate;
从您的问题中不清楚电话号码是否可以在某个日期出现多次,或者如果确实发生了会发生什么。此外,您的日期似乎存储为文本而不是日期。
推荐阅读
- colors - 24位rgb到12位转换
- android - 将 Json 数据解析为 Json 对象
- javascript - 通过 DOM 递归搜索以去除 innerText
- unicode - 为什么表情符号的 Unicode 变体(文本)选择器仅适用于表情符号的子集?
- javascript - 如何在不点击的情况下在 Ckeditor 中运行插件
- javascript - iPad 上的 insertHtml 插入空内容控件
- javascript - 如何在 React js 中编辑本地存储中的数组数据
- java - 如何制作用户可以选择使用哪个选项的程序?
- spring-boot - 包含西里尔字母的附件名称在 gmail 中以加密形式显示
- sql - 如何在 SQL Server 中查找特定字符串的多次出现并获取值