Mysql在Pivot视图中显示数据
抱歉,伙计们,由于sqlfiddle.com遇到一些问题,无法生成小提琴 我在mysql数据库中有一个表,如下所示:Mysql在Pivot视图中显示数据,mysql,select,pivot,mysql-workbench,Mysql,Select,Pivot,Mysql Workbench,抱歉,伙计们,由于sqlfiddle.com遇到一些问题,无法生成小提琴 我在mysql数据库中有一个表,如下所示: Username mailtime mailid User4 3/23/2013 10:26 4473 User1 4/6/2013 16:13 10934 User4 4/6/2013 17:17 10957 User1 4/6/2013 23:56 11092 User2 4/7/2013 11:58 11187 User1 4/7
Username mailtime mailid
User4 3/23/2013 10:26 4473
User1 4/6/2013 16:13 10934
User4 4/6/2013 17:17 10957
User1 4/6/2013 23:56 11092
User2 4/7/2013 11:58 11187
User1 4/7/2013 12:06 11190
User4 4/7/2013 13:11 11216
User4 4/7/2013 13:14 11217
User1 4/7/2013 14:40 11245
User5 4/7/2013 15:52 11259
User1 4/7/2013 18:12 11303
User5 4/7/2013 19:56 11323
User1 4/7/2013 22:52 11358
User4 4/8/2013 11:13 11465
User1 4/8/2013 11:20 11475
User1 4/8/2013 11:35 11491
User4 4/8/2013 12:10 11511
User4 4/8/2013 12:38 11532
User4 4/8/2013 12:51 11540
User4 4/8/2013 13:06 11551
User1 4/8/2013 13:09 11552
User4 4/8/2013 13:15 11560
User1 4/8/2013 13:24 11572
User1 4/8/2013 14:01 11614
User4 4/8/2013 14:27 11640
User1 4/8/2013 15:41 11700
User5 4/8/2013 16:04 11730
User1 4/8/2013 17:40 11814
User4 4/9/2013 11:16 12117
User1 4/9/2013 12:41 12198
User1 4/9/2013 12:59 12209
User4 4/9/2013 13:58 12243
User4 4/9/2013 14:05 12250
User1 4/9/2013 14:15 12256
User4 4/9/2013 16:51 12351
User1 4/9/2013 17:33 12397
User1 4/9/2013 19:01 12455
User4 4/9/2013 19:15 12463
User5 4/9/2013 20:59 12517
User1 4/9/2013 21:26 12530
User1 4/9/2013 22:46 12561
User1 4/10/2013 1:01 12595
User1 4/10/2013 8:42 12631
User1 4/10/2013 10:18 12663
User1 4/10/2013 11:21 12697
User3 4/10/2013 11:27 12701
User4 4/10/2013 11:34 12705
User1 4/10/2013 15:26 12856
User4 4/10/2013 16:51 12909
User2 4/10/2013 16:53 12913
Username < 5 days 6-Apr 7-Apr 8-Apr 9-Apr 10-Apr Grand Total
User1
User2
User3
User4
User5
Grand Total
我需要的输出如下:
Username mailtime mailid
User4 3/23/2013 10:26 4473
User1 4/6/2013 16:13 10934
User4 4/6/2013 17:17 10957
User1 4/6/2013 23:56 11092
User2 4/7/2013 11:58 11187
User1 4/7/2013 12:06 11190
User4 4/7/2013 13:11 11216
User4 4/7/2013 13:14 11217
User1 4/7/2013 14:40 11245
User5 4/7/2013 15:52 11259
User1 4/7/2013 18:12 11303
User5 4/7/2013 19:56 11323
User1 4/7/2013 22:52 11358
User4 4/8/2013 11:13 11465
User1 4/8/2013 11:20 11475
User1 4/8/2013 11:35 11491
User4 4/8/2013 12:10 11511
User4 4/8/2013 12:38 11532
User4 4/8/2013 12:51 11540
User4 4/8/2013 13:06 11551
User1 4/8/2013 13:09 11552
User4 4/8/2013 13:15 11560
User1 4/8/2013 13:24 11572
User1 4/8/2013 14:01 11614
User4 4/8/2013 14:27 11640
User1 4/8/2013 15:41 11700
User5 4/8/2013 16:04 11730
User1 4/8/2013 17:40 11814
User4 4/9/2013 11:16 12117
User1 4/9/2013 12:41 12198
User1 4/9/2013 12:59 12209
User4 4/9/2013 13:58 12243
User4 4/9/2013 14:05 12250
User1 4/9/2013 14:15 12256
User4 4/9/2013 16:51 12351
User1 4/9/2013 17:33 12397
User1 4/9/2013 19:01 12455
User4 4/9/2013 19:15 12463
User5 4/9/2013 20:59 12517
User1 4/9/2013 21:26 12530
User1 4/9/2013 22:46 12561
User1 4/10/2013 1:01 12595
User1 4/10/2013 8:42 12631
User1 4/10/2013 10:18 12663
User1 4/10/2013 11:21 12697
User3 4/10/2013 11:27 12701
User4 4/10/2013 11:34 12705
User1 4/10/2013 15:26 12856
User4 4/10/2013 16:51 12909
User2 4/10/2013 16:53 12913
Username < 5 days 6-Apr 7-Apr 8-Apr 9-Apr 10-Apr Grand Total
User1
User2
User3
User4
User5
Grand Total
Username<5天4月6日7日4月8日4月9日4月10日总计
用户1
用户2
用户3
用户4
用户5
总计
不知道怎么做
最大邮件时间显示在最后第二列,前几列显示前几天,<5天是所有其他天的累计值
编辑::
所需的数据是mailid的计数
<5天、4月6日、4月7日、4月8日、4月9日和4月10日的列是mailtime列中的列。如果列中的最大日期为3月25日,则列中的日期应为<5天、3月20日、3月21日、3月22日、3月23日、3月24日和3月25日您对所需结果的描述并不完全清楚,但您似乎可以使用以下内容来获得结果。这将获取前5天中每个用户名的总行数(基于最长日期)以及这5天之前每个用户的总行数:
select
coalesce(username, 'Grand Total') username,
max(`< 5 days`) `< 5 days`,
sum(case when maildate = '6-Apr' then 1 else 0 end) `6-Apr`,
sum(case when maildate = '7-Apr' then 1 else 0 end) `7-Apr`,
sum(case when maildate = '8-Apr' then 1 else 0 end) `8-Apr`,
sum(case when maildate = '9-Apr' then 1 else 0 end) `9-Apr`,
sum(case when maildate = '10-Apr' then 1 else 0 end) `10-Apr`,
count(*) GrandTotal
from
(
select c.username,
date_format(c.mailtime, '%e-%b') maildate,
coalesce(o.`< 5 days`, 0) `< 5 days`
from yt c
left join
(
select username,
count(*) `< 5 days`
from yt
where mailtime <= (select date_sub(max(mailtime), interval 4 DAY)
from yt)
) o
on c.username = o.username
where c.mailtime >= (select date_sub(max(mailtime), interval 4 DAY)
from yt)
) d
group by username with rollup;
看。两个查询都给出了以下结果:
| USERNAME | < 5 DAYS | 6-APR | 7-APR | 8-APR | 9-APR | 10-APR | GRANDTOTAL |
--------------------------------------------------------------------------------
| User1 | 0 | 1 | 4 | 7 | 7 | 5 | 24 |
| User2 | 0 | 0 | 1 | 0 | 0 | 1 | 2 |
| User3 | 0 | 0 | 0 | 0 | 0 | 1 | 1 |
| User4 | 2 | 1 | 2 | 7 | 5 | 2 | 17 |
| User5 | 0 | 0 | 2 | 1 | 1 | 0 | 4 |
| Grand Total | 2 | 2 | 9 | 15 | 13 | 9 | 48 |
|用户名|<5天| 4月6日| 4月7日| 4月8日| 4月9日| 4月10日|总计|
--------------------------------------------------------------------------------
|用户1 | 0 | 1 | 4 | 7 | 7 | 5 | 24|
|用户2 | 0 | 0 | 1 | 0 | 0 | 1 | 2|
|用户3 | 0 | 0 | 0 | 0 | 1 | 1|
|用户4 | 2 | 1 | 2 | 7 | 5 | 2 | 17|
|用户5 | 0 | 0 | 2 | 1 | 1 | 0 | 4|
|总计| 2 | 2 | 9 | 15 | 13 | 9 | 48|
如果这不是您想要的结果,那么您必须进一步解释您的需要。您显示了您想要的数据格式,但根据您的样本数据,每列中会包含哪些数据?这不是很清楚。谢谢@bluefeet,我已经编辑了这个问题。编辑没有多大帮助,根据你的数据,你希望得到什么样的结果?在每列中,您期望的值是什么?例如,
抱歉给@bluefeet带来麻烦。我再次编辑了这篇文章!那很有魅力!谢谢@bluefeet,很抱歉这篇文章不完整!