如何使用MySQL查询解决高级过滤器问题

时间:2010-06-24 08:52:05

标签: mysql

我想知道一个解决方案,它可以帮助我生成一个MySQL查询,以便从单个数据库表中获取数据。

Table name: Rates 
Columns: id, date, weekday, costA, costB, costC, sellA, sellB, sellC
SAMPLE TABLE DATA
=================

id | date    | weekday | costA | costB | costC | sellA | sellB | sellC
----------------------------------------------------------------------
01  2010/6/1     TUE      120     135     140     150     165    180
02  2010/6/2     WED      120     135     140     150     165    180
03  2010/6/3     THU      120     135     140     150     165    180
04  2010/6/4     FRI      120     135     140     150     165    180
05  2010/6/5     SAT      120     135     140     150     165    180
06  2010/6/6     SUN      120     135     140     150     165    180
07  2010/6/7     MON      120     135     140     150     165    180
...
16  2010/6/16    WED      150     140     140     200     220    230
17  2010/6/17    THU      150     140     140     200     220    230
18  2010/6/18    FRI      150     140     140     200     220    230
19  2010/6/19    SAT      150     140     140     200     220    230
20  2010/6/20    SUN      150     140     140     200     220    230
21  2010/6/21    MON      150     140     140     200     220    230
22  2010/6/22    TUE      150     140     140     200     220    230

我想对此表进行的查询是,我想获取每个成本和销售列的开始日期以及价格的最后日期更改。我使用以下MYSQL查询设法做到了这一点:

SELECT * FROM rates ID IN(SELECT MIN(ID) FROM `rates` GROUP BY costA,costB,costC,sellA,sellB,sellC) OR ID IN(SELECT MAX(ID) FROM `rates` GROUP BY costA,costB,costC,sellA,sellB,sellC)

我必须解决的问题是,如果例如每个星期三和每个星期五有两个不同的价格,从2010/06/01到2010/06/16。那么如何生成一个查询,可以按工作日给我一个总摘要,如下所述。

id | date    | weekday | costA | costB | costC | sellA | sellB | sellC
----------------------------------------------------------------------
01  2010/6/1     TUE      120     135     140     150     165    180
02  2010/6/2     WED      100     100     100     110     120    130
03  2010/6/3     THU      120     135     140     150     165    180
04  2010/6/4     FRI      140     150     160     150     175    180
05  2010/6/5     SAT      120     135     140     150     165    180
06  2010/6/6     SUN      120     135     140     150     165    180
07  2010/6/7     MON      120     135     140     150     165    180
...
16  2010/6/16    WED      100     100     100     110     120    130
17  2010/6/17    THU      150     140     140     200     220    230
18  2010/6/18    FRI      150     140     140     200     220    230
19  2010/6/19    SAT      150     140     140     200     220    230
20  2010/6/20    SUN      150     140     140     200     220    230
21  2010/6/21    MON      150     140     140     200     220    230
22  2010/6/22    TUE      150     140     140     200     220    230

从上表中,我需要生成的报告应该类似于下面的报告。

id | date    | weekday | costA | costB | costC | sellA | sellB | sellC
----------------------------------------------------------------------
01  2010/6/1     TUE      120     135     140     150     165    180
02  2010/6/2     WED      100     100     100     110     120    130
03  2010/6/3     THU      120     135     140     150     165    180
04  2010/6/4     FRI      140     150     160     150     175    180
05  2010/6/5     SAT      120     135     140     150     165    180
15  2010/6/15    TUE      120     135     140     150     165    180
16  2010/6/16    WED      100     100     100     110     120    130
17  2010/6/17    THU      150     140     140     200     220    230
22  2010/6/22    TUE      150     140     140     200     220    230

从上表中读取的位置为 2010/06/01至2010/06/16的费率为:

WEEKDAY|  costA | costB | costC | sellA | sellB | sellC
  SAT     120     135     140     150     165    180 
  SUN     120     135     140     150     165    180
  MON     120     135     140     150     165    180
  TUE     120     135     140     150     165    180
  WED     100     100     100     110     120    130
  THU     120     135     140     150     165    180
  FRI     140     150     160     150     175    180

从2010/06/17到2010/06/22

WEEKDAY|  costA | costB | costC | sellA | sellB | sellC
  SAT     150     140     140     200     220    230 
  SUN     150     140     140     200     220    230
  MON     150     140     140     200     220    230
  TUE     150     140     140     200     220    230
  WED     150     140     140     200     220    230
  THU     150     140     140     200     220    230
  FRI     150     140     140     200     220    230

我希望有解决方案来解决这个问题。简而言之,我在这里要做的是生成一个周期性的利率表,它会根据工作日告诉成本/卖出价格的详细信息,并分为动态日期,告诉每个类似周的开始和结束日期。 / p>

1 个答案:

答案 0 :(得分:0)

这可以满足您的需求吗?

select weekday,costA,costB,costC,sellA,sellB,sellC, min(date) from_dt, max(date) to_dt
from rates 
group by weekday,costA,costB,costC,sellA,sellB,sellC