gpt4 book ai didi

MySQL:需要计算一个月的最后一个星期五

转载 作者:行者123 更新时间:2023-11-29 03:32:43 25 4
gpt4 key购买 nike

我正在尝试解决一项任务:我有一个包含有关船舶战斗信息的表格。战斗由姓名日期组成。问题是获取战斗发生月份的最后一个星期五

WITH num(n) AS(
SELECT 0
UNION ALL
SELECT n+1 FROM num
WHERE n < 31),
dat AS (
SELECT DATEADD(dd, n, CAST(battles.date AS DATE)) AS day,
dateadd(dd, 0, cast(battles.date as date)) as fight,
name FROM num,battles)
SELECT name, fight, max(day) FROM dat WHERE DATENAME(dw, day) = 'friday'

我以为一定有一个最大日期之类的,但我的代码是错误的。

结果应该是这样的:

请帮忙!!

附言DATE_FORMAT 不可用

最佳答案

可能的问题:正如 spencer7593 注意到的那样 - 我应该做但没有做 - 您的原始查询根本不是 MySQL。如果您要移植查询,那没问题。否则这个答案将没有帮助,因为它使用了 MySQL 函数。

您想要的日期是数字 4(0 在 MySQL 中是星期日)。

因此,如果月份的最后一天是 4,则需要月份的最后一天;如果一个月中的第几天是 5,你想要一个早 1 天的日期;如果这个月的第几天是 3,你想要一个晚 1 天的日期,但这是不可能的(月末),所以你真的需要一个早 6 天的日期。

这意味着如果天数差为负,您需要它对七进行模数。

然后您可以构建此表达式(@DATE 是您的日期;我使用假日期进行测试)

SET @DATE='2015-02-18';
DATE_SUB(LAST_DAY(@DATE), INTERVAL ((WEEKDAY(LAST_DAY(@DATE))+7-4))%7 DAY);

它取一个月的最后一天 (LASTDAY(@DATE)),然后计算它的星期几,得到一个从 0 到 6 的数字。加 7 以确保减去后的正数;然后减去所需的天数,在本例中为 4 表示星期五。

结果以 7 为模,是最后一天的天数与想要的天数的差值(始终为正数)。由于 DATE_SUB(date, 0) 返回参数日期,我们不需要使用 IF

SET @DATE='1962-10-20';
SELECT DATE_SUB(LAST_DAY(@DATE), INTERVAL ((WEEKDAY(LAST_DAY(@DATE))+7-4))%7 DAY) AS friday;
+------------+
| friday |
+------------+
| 1962-10-26 |
+------------+

你的查询会变成这样:

SELECT `name`, `date`,
DATE_SUB(LAST_DAY(`date`),
INTERVAL ((WEEKDAY(LAST_DAY(`date`))+7-4))%7 DAY) AS friday
FROM battles;

关于MySQL:需要计算一个月的最后一个星期五,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28099404/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com