[英]Getting first week of date in mysql
我有很多桌子,我需要获得一部电影的总收入,现在我的问题是我不知道如何只获得一部电影的第一周的总和。
这就是我所需要的。
+-------------------------------------------+
| title | Week one | Week one |
| | (Wed-Sun) | (Mon-Tue) |
+-------------------------------------------+
| title 1 | 50000 | 10000 |
+-------------------------------------------+
如果电影的首映显示是星期三,那么我应该做3列,第一列是title ,第二列是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-Monday开始的工作日索引。
假设你有表Movies
与title
和starting_show_date
列, value_table
与action_date
和amount
列。
您可以通过将金额分成两部分来求和,如下所示:
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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.