2009-09-30 89 views
0

我正在试图做一些我从未做过的查询。它可能需要变量,但我从来没有这样做过,而且我不确定它的确如此。SQL查询问题

我想要的是获得一个销售清单,按照子公司分组,然后按月分组。

我能做到这一点,但这里的扭曲......我不想做一个月,但本月1,2月,3个月......

而且这些都不是一月,二月,三月,但是自首次销售之日起的月数。

这可能在查询中,或者我需要在我的代码中执行此操作。

哦,MySQL的5.1.something ...

+0

你能举个例子吗? – BobbyShaftoe 2009-09-30 01:08:06

回答

1

当然,只是写在SQL自从第一次出售产生的月数的表达式(你的意思是先卖为afiliate?如果是这样,你需要一个子查询) 既然你说你想要一个列表的销售,我假设你不是真的想“集团”affilaite和monthcount,你只是想排序,或顺序通过这些值)

如果您想要平均销售额或销售额或其他一些总计销售数据的功能,那么你会做一个“分组依据”...

而我不认为你需要担心按月排序,你可以简单地按每个销售日期和每个分支机构最早的销售日期。 (如果你想申请第三的排序规则,销售日期排序后,那么你就需要更加小心。)

Select * From Sales S 
    Order By Affiliate, 
     SalesDate - (Select Min(SalesDate) 
         From Sales 
         Where Affiliate = S.Affiliate) 

或者,如果你真的需要它是由差几个月

Select * From Sales S 
    Order By Affiliate, 
     Month(SalesDate) - 
       (Select Month(Min(SalesDate)) 
       From Sales 
       Where Affiliate = S.Affiliate) 
+0

@Charles您忘记了GROUP BY,并且还有一个事实,即按月份分组(需要DateDiff())。但是,这似乎是OP所需要的。 – mjv 2009-09-30 01:23:03

0

这是可能如果您使用我喜欢称之为“SQL体操”的标准SQL。它可以通过子查询完成。

但它看起来令人难以置信的难看,很难维护,它真的不值得。使用包装SQL的许多编程语言之一(例如PL/SQL)或甚至可以调用SQL的通用语言(例如Python)会更好。

结果将以两种语言显示,但会比在SQL中编写的同样的东西更容易理解。

+0

但是,纯SQL通常非常快,因为它可以进行优化和平行。 – 2009-09-30 03:10:42