2

我的“订单”表中有以下相关列:

Date_Day(是从 1 到 31 的范围,没有尾随 0)

Date_Month(是从一月到十二月的范围,不是数字)

Date_Year(是 4 位格式的年份,例如:2005)

Total(带小数点后两位的数字)

我知道存储日期的方式非常糟糕,但这是给我的数据库。我试图找到一些东西,但我不确定是否有办法在 SQL 中而不是在 PHP 中进行数学运算:

  1. 每年每一天的总和。

  2. 去年这一天的总和(这一天是该月的第 n 个工作日。所以今天是 2012 年 10 月的第一个星期二)

  3. 史上票房最高的一天

MySQL 不是我的强项,虽然我可以在 PHP 中解决它,但我希望看到它在 MySQL 中完成,这样我就可以开始更多地学习它。

4

1 回答 1

6

如果要保持数据库结构不变,可以使用以下查询:

每年每一天的总和:

SELECT Date_Year, Date_Month, Date_Day, SUM(Total)
FROM tablename
GROUP BY Date_Year, Date_Month, Date_Day

去年这一天的总和:

SELECT SUM(Total)
FROM tablename
WHERE
  Date_Year = YEAR(CURDATE())-1
  AND Date_Month = MONTHNAME(CURDATE())
  AND Date_Day = DAY(CURDATE())

史上票房最高的一天:

SELECT Date_Year, Date_Month, Date_Day, SUM(Total)
FROM tablename
GROUP BY Date_Year, Date_Month, Date_Day
ORDER BY SUM(Total) DESC
LIMIT 1
于 2013-10-01T20:10:16.503 回答