customer Date location
1 25Jan2018 texas
2 15Jan2018 texas
3 12Feb2018 Boston
4 19Mar2017 Boston.
我正在尝试按Date列的yearmon找出客户组的计数。Date列为文本数据类型
例如:在2018年1月,计数为2
答案 0 :(得分:1)
您不应将日期存储在文本列中...
select substring(Date, length(Date)-6), count(*)
from tablename
group by substring(Date, length(Date)-6)
答案 1 :(得分:1)
我会做以下事情:
SELECT
date_part('year', formattedDate) as Year
,date_part('month', formattedDate) as Month
,count(*) as CustomerCountByYearMonth
FROM
(SELECT to_date(Date,'DDMonYYYY') as formattedDate from <table>) as tbl1
GROUP BY
date_part('year', formattedDate)
,date_part('month', formattedDate)
内部查询可以对日期进行任何其他格式设置,以进行调整,以防万一需要填充某些位数的天,或者一个月中有四个字母而不是三个字母的情况。
通过转换为日期类型,您可以按日期类型(而不是字母顺序)正确排序。
可选:
SELECT
Year
,Month
,count(*) as CustomerCountByYearMonth
FROM
(SELECT
date_part('year', to_date(Date,'DDMonYYYY')) as Year
,date_part('month', to_date(Date,'DDMonYYYY')) as Month
FROM <table>) as tbl1
GROUP BY
Year
,Month
答案 2 :(得分:0)
我以为@Jarlh问了一个好问题-1月1日这样的日期呢?是2019年1月1日还是2019年1月1日?如果可以,则正则表达式可能会起作用。
select
substring (date from '\d+(\D{3}\d{4})') as month,
count (distinct customer)
from t
group by month
“与众不同的客户”还假设您可能在同一个月内列出了同一位客户,但您只想计算一次。如果不是这种情况,只需删除“ distinct”即可。
而且,如果您希望以日期格式输出:
select
to_date (substring (date from '\d+(\D{3}\d{4})'), 'monyyyy') as month,
count (distinct customer)
from t
group by month
答案 3 :(得分:-1)
如果它是日期列,则可以截断日期:
select date_trunc('month', date) as yyyymm, count(*)
from t
group by yyyymm
order by yyyymm;
我真的读到类型是date
。对于字符串,只需使用字符串函数:
select substr(date, 3, 7) as mmmyyyy, count(*)
from t
group by mmmyyyy;
不幸的是,在这种情况下无法订购。您确实应该使用正确的类型来存储日期。