在mysql中获取约会的第一周



我有很多表,我需要得到一部电影的总收入,现在我的问题是我不知道如何只得到一部影片的第一周的总和。

这正是我需要的。

+-------------------------------------------+
|    title  |   Week one      |  Week one   |
|           |   (Wed-Sun)     | (Mon-Tue)   |
+-------------------------------------------+
| title 1   | 50000           |    10000    |
+-------------------------------------------+

如果一部电影的起点是wed,那么我应该制作3列,第一列是标题,第二列是wed sun和第三列是mon tue。

这可以像select movie, sum(wed-sun), sum(mon-tue)一样查询吗提前感谢

这是我对您问题的理解。

SELECT movie, sum(wed-sun), sum(mon-tue) CONVERT(date, getdate()) as day
FROM thetable
WHERE thedate(BETWEEN first AND last) 
GROUP BY day

如果使用日期类型,则可以使用DAYOFWEEK()。看见http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_dayofweek

从周一开始的一周

SUM(CASE WHEN DAYOFWEEK(DATE)=2 THEN 1 WHEN DAYOFWEEK(DATE)=3 THEN 1 ELSE 0 END)

从结婚的太阳开始的一周

SUM(CASE WHEN DAYOFWEEK(DATE)=4 THEN 1 WHEN DAYOFWEEK(DATE)=5 THEN 1 WHEN DAYOFWEEK(DATE)=6 THEN 1 WHEN DAYOFWEEK(DATE)=7 THEN 1 WHEN DAYOFWEEK(DATE)=1 THEN 1 ELSE 0 END)

如果使用WEEKDAY而不是DAYOFWEEK,则可以缩短case语句:

SELECT
     movie_id, 
     title,
     SUM(CASE WHEN WEEKDAY(date_field) < 2 THEN field_to_sum ELSE 0 END) `mon-tue`,
     SUM(CASE WHEN WEEKDAY(date_field) > 1 THEN field_to_sum ELSE 0 END) `wed-sun`
FROM
    movies
/* optional WHERE */
GROUP_BY movie_id

显然您想要WEEKDAY FUNCTION,它返回从0到周一开始的工作日索引。

假设表Movies包含titlestarting_show_date列,value_table包含action_dateamount列。

您可以通过将金额拆分为两部分来计算金额,如下所示:

select
    movies.title,
    sum(case when value_table.action_date
        < dateadd(movies.starting_show_date , interval  7 -WEEKDAY(movies.starting_show_date) day)
             then value_table.amount else 0 end) as FirstWeek,
    sum(case when value_table.action_date
        >= dateadd(movies.starting_show_date , interval  7 -WEEKDAY(movies.starting_show_date) day)
             then value_table.amount else 0 end) as OtherWeeks
from
    movies
inner join
    value_table
on
    movies.id = value_table.movie_id
group by 
    movies.title

最新更新