最好build立一个SQL查询或外推另一个程序?

我在为客户开发一些查询时遇到了麻烦,有时会发现自己问:“最好是从我知道我正在查找的数据子集开始,然后导入到像Excel这样的程序中,然后处理数据相应地使用类似的function,比如“数据透视表”。

特别是我正在努力的一个例子是下面的例子:

我有一个在线会员注册系统。 为了简单起见,我们假设捕获的数据是:成员ID,注册date,他们的推荐代码,他们的状态。

示例成员表格可能如下所示:

MemberID | Date | Ref | USState ===================================== 1 | 2011-01-01 | abc | AL 2 | 2011-01-02 | bcd | AR 3 | 2011-01-03 | cde | CA 4 | 2011-02-01 | abc | TX 

等等….

最终,我想要使用这个数据集来构build和运行的查询types可以扩展为:“向我显示所有引用代码的列表以及每个月在单个结果集中注册的数量”。

例如:

 Ref | 2011-01 | 2011-02 | 2011-03 | 2011-04 ============================================== abc | 1 | 1 | 0 | 0 bcd | 1 | 0 | 0 | 0 cde | 1 | 0 | 0 | 0 

我不知道如何在MySQL中build立这种查询types(我想如果可以做到这一点,将需要大量的代码,连接,子查询和联合。

同样,另一个示例查询可能是按月份在每个州注册的成员数量

 USState | 2011-01 | 2011-02 | 2011-03 | 2011-04 ============================================== AL | 1 | 0 | 0 | 0 AR | 1 | 0 | 0 | 0 CA | 1 | 0 | 0 | 0 TX | 0 | 1 | 0 | 0 

我想我的问题有两点:

1)实际上最好是仅仅尝试使用Navicat之类的MySQL GUI中的必要数据来构build这些数据,或者只是将整个数据子集导入到Excel中并向前推进?

2)如果我要使用MySQL路由,在下面的示例中构build数据子集的正确方法是什么(请注意查询可能变得更加复杂,例如“显示每个特定的注册次数按每个州划分,并由每个代理分组(每个代理有50个可能的行)“

提前谢谢你的帮助。

我是在服务器端进行这种查询的支持者,至less要获取所需的数据。

你应该创build一个时间表。 它可以像你期望的一样复杂,甚至可以持续几天。

 id year month monthstart monthend 1 2011 1 1/1/2011 1/31/2011 ... 

这给你几乎无限的能力,以各种有趣的方式对数据进行分组和查询。

获取原始引荐计数的数据按月查询您提到的将是非常简单的…

 select a.Ref, b.year, b.month, count(*) as referralcount from myTable a join months b on a.Date between b.monthstart and b.monthend group by a.Ref, b.year, b.month order by a.Ref, b.year, b.month 

结果集应该是像ref = abc, year = 2011, month = 1, referralcount = 1 ,而不是每个月的列。 我假设,因为获取更大的一组数据并在Excel中操作它是一个选项,改变这些数据的布局并不困难。

查看这个以前的答案,通过不同的例子对这个概念进行更详细的介绍:按照月份计算计数的SQL查询

我使用基于Excel的应用程序来处理多维时间序列数据,并且最近一直在执行预定义的数据透视表电子表格,所以我确切知道你在想什么。 我很乐意为用户提供工具,而不是编写单独的报告或整个查询语言供他们使用。 您可以随时创build连接到数据库的数据透视表,这并不困难。 Andrew Whitechapel 在这里有一个很好的例子。 但是,您还需要在Excel中启动该function,或设置一个基本的Excel VSTO程序,这在Visual Studio 2010中相当容易。(microsoft.com/vsto)

另一件事,不要觉得你必须创造可笑的复杂的查询。 您拥有的每个连接都将减慢任何关系数据库的速度。 多年前我发现在大多数情况下对临时表进行多步查询会更清晰,更快速,更容易编写和支持。