我正在尝试为列中的特定值编号。您可以看到我已经根据日期对表进行了排序,对于查询来说,根据已经排序的日期进行编号(从基于日期的最小值到最高值)是很重要的。
我试图为潜在客户成为客户所需的访问次数分配一个数字。
Ad Group|Vist 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
Desired Output
Ad Group|Visit 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/05/2017|888-465-9999|1
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
A. |09/09/2017|888-465-9999|2
答案 0 :(得分:1)
应创建所需输出的查询:
'currencies.*' => 'size:3|alpha_num'
答案 1 :(得分:1)
以下解决方案应适用于所有MySQL版本(尤其是<8.0):
尝试以下查询(请相应地更改表和列名称):
SET @num_occurence = 0;
SET @phone_no = '';
SELECT derived_t.ad_group,
derived_t.visit_date,
derived_t.phone_number,
derived_t.number_of_occurences
FROM
(
SELECT t1.ad_group,
t1.visit_date,
@num_occurence := CASE
WHEN @phone_no = t1.phone_number
THEN @num_occurence + 1
ELSE 1
END AS number_of_occurences,
@phone_no := t1.phone_number AS phone_number
FROM your_table AS t1
ORDER BY t1.phone_number ASC, t1.visit_date ASC
) AS derived_t
ORDER BY derived_t.visit_date ASC
答案 2 :(得分:1)
如果您使用的是8.0+,则...窗口功能可用,这很简单。
SELECT `Ad Group`
, `Visit Date`
, `Phone Number`
, ROW_NUMBER() over (PARTITION BY `Ad Group`, `Phone Number` ORDER BY Visit Date Asc) as `Number of Occurrences within date`
FROM TableName
ORDER BY `Visit Date` asc
window函数仅将ag group
和phone numbers
视为“唯一键”,并按访问日期asc排序此键,然后为遇到的唯一键的每一行分配数字1-x(每个日期1个)。如果给定的组和编号重复了日期,则我们没有定义特定的顺序,并且将为该唯一键分配下两个编号。如果我们使用Dense_Rank()窗口函数,则会为每行分配相同的编号。
窗口功能允许排序和编号与命令的顺序和选择相互依赖。这样一来,我们就可以为按访问日期排序的每个“分区”数据(广告组和电话号码)分配行。因此,允许#从每个分区的1开始,并为遇到的每个日期行加1;按照访问日期的升序。
如果不是8.0+,则忽略此帖子; P
某些窗口功能包括:
文档:https://dev.mysql.com/doc/refman/8.0/en/window-functions-usage.html
答案 3 :(得分:0)
假设我已正确理解您的问题,以下查询应会有所帮助:
SELECT `Ad Group`, `Visit Date`, `Phone Number`, count(*) `Number of Occurrences within date`
FROM <table name>
ORDER BY `Visit Date` (ASC|DESC)
GROUP BY `Phone Number`
理论上,以上查询应始终返回每个组的第一行。