Mysql 试图找到去年的这一天。10月1日星期五,而不是10月4日

Mysql 试图找到去年的这一天。10月1日星期五,而不是10月4日,mysql,sql,Mysql,Sql,我不确定这在不使用PHP的情况下是否可行,但我愿意尝试一下 我有一个看起来像这样的数据库(一堆其他东西,但这是所有相关的: Date\u Day(范围从1到31,后面没有0) Date\u Month(是从1月到12月的范围,不是数字) Date\u Year(是4位格式的年份,例如:2005年) 总计(小数点后两位) 我知道日期的存储方式很糟糕,但这就是我得到的数据库。如果有一个查询,我可以使用这些列创建一个实际的DATETIME列,我很乐意这样做,我只是不知道该查询是什么样子 我有一个查询,

我不确定这在不使用PHP的情况下是否可行,但我愿意尝试一下

我有一个看起来像这样的数据库(一堆其他东西,但这是所有相关的:

Date\u Day
(范围从1到31,后面没有0)

Date\u Month
(是从1月到12月的范围,不是数字)

Date\u Year
(是4位格式的年份,例如:2005年)

总计
(小数点后两位)

我知道日期的存储方式很糟糕,但这就是我得到的数据库。如果有一个查询,我可以使用这些列创建一个实际的DATETIME列,我很乐意这样做,我只是不知道该查询是什么样子

我有一个查询,返回前几年当天的总销售额:

SELECT 
    Date_Year, Date_Month, SUM(Total) 
FROM 
    tablename 
WHERE 
    Date_Year < YEAR(CURDATE()) 
AND 
    Date_Month = MONTHNAME(CURDATE()) 
AND 
    Date_Day = DAY(CURDATE()) 
GROUP BY 
    Date_Year, Date_Month
选择
年、月、日、和(总计)
从…起
表名
哪里
日期\年份<年份(CURDATE())
及
日期\月份=月份名称(CURDATE())
及
日期=天(CURDATE())
分组
年月日
因此,如果我今天运行此程序,我会得到往年10月4日的每日总数。问题是,在销售中,这对比较增长没有多大帮助。我真正需要的是往年10月第一个星期五的每日总数

这不需要依赖PHP就可以实现吗?如果可以,我将非常感谢您的帮助


谢谢。

您可能正在寻找

返回日期的工作日索引(1=星期日,2=星期一,…,7=星期六)。这些索引值对应于ODBC标准

mysql> SELECT DAYOFWEEK('2007-02-03');
     > 7
选择
年、月、日、和(总计)
从…起
表名
哪里
日期\年份<年份(CURDATE())
及
日期\月份=月份名称(CURDATE())
及
日期=天(最后一天(CURDATE())-((28+工作日(最后一天(CURDATE()))-4)))
分组
年月日

也许这会有帮助

这是我在搜索如何做时发现的第一个结果之一,但我仍然迷路了。我正在寻找一个更完整的答案。谢谢你的时间,我非常感谢。如果你在,比如说,一个月的第五个星期五呢?既然同一个月不总是有5个星期五,那该怎么处理呢?寿没有第五个星期五的ld年将被跳过?在这种情况下,这将是下个月的第一个星期五。考虑像这样的边缘情况并将其放入您的问题中是很重要的。我怀疑是否有任何内置内容,因此您需要尽可能完整地给出规范。明白。谢谢。我在其他地方发现了这个问题,我是wondering如果这可以适用于MySQL:这是一个月的第一个星期五。这就是我们需要讨论的问题。“我真正需要的是往年10月第一个星期五的每日总数”,这只是一个例子。我需要这个数据才能得到去年的这个星期五。类似于这个T-SQL语句:
SELECT 
    Date_Year, Date_Month, SUM(Total) 
FROM 
    tablename 
WHERE 
    Date_Year < YEAR(CURDATE()) 
AND 
    Date_Month = MONTHNAME(CURDATE()) 
AND 
    Date_Day = DAY(LAST_DAY(CURDATE()) - ((28 + WEEKDAY(LAST_DAY(CURDATE())) - 4)))
GROUP BY 
    Date_Year, Date_Month