【问题标题】:SQL statement confusion, timestamps return inaccurate resultsSQL语句混乱,时间戳返回不准确的结果
【发布时间】:2020-09-08 09:36:36
【问题描述】:

我对我的 sql 语句的工作方式有点困惑。我正在尝试从日期范围中选择一个名为“投票”的数据,例如“本月最佳投票”、“本周最佳投票”等。 这就是问题所在。我的sql语句:

SELECT * 
FROM studentid.questions 
WHERE vote IN (
                SELECT MAX(vote) 
                FROM studentid.questions 
                WHERE YEAR(timestamp) = 2020 
                AND WEEK(timestamp, 4) = 21
            );

就我而言,本周(2020 年 5 月 21 日)的最高票数应该是 2 票,这是正确的,但它显示 1 月和 2 月的数据也有 2 票。检查下面的图片链接以查看结果..这根本不匹配。

【问题讨论】:

    标签: mysql date select timestamp max


    【解决方案1】:

    在外部查询中重复日期条件:

    SELECT * 
    FROM studentid.questions 
    WHERE vote IN (
        SELECT MAX(vote) 
        FROM studentid.questions 
        WHERE YEAR(timestamp) = 2020 AND WEEK(timestamp, 4) = 21
    ) AND
        YEAR(timestamp) = 2020 AND
        WEEK(timestamp, 4) = 21;
    

    也许你可以在这里使用LIMIT

    SELECT *
    FROM studentid.questions 
    WHERE YEAR(timestamp) = 2020 AND WEEK(timestamp, 4) = 21
    ORDER BY vote DESC
    LIMIT 1;
    

    【讨论】:

    • @RiggsFolly 凌晨 1 点,我已经连续工作了 14 天......奇迹我什至得到了任何形式的答案:-)
    • 非常感谢!两者实际上都有效。但奇怪的是,在外部查询中重复同样的事情会起作用……为什么会这样?内部查询不应该根据时间戳范围处理提取吗?如果你不是因为工作太累而太累,你能给我解释一下吗?如果你是,那你不回答也没关系
    • @WickedLook 想法是这样的:您的子查询实际上找到了正确的投票计数,对于特定的年份和星期。在外部查询中,您只检查投票计数,而对于您的数据,其他一些年份一周具有最大投票计数。因此,您还需要限制外部查询中的日期。
    • 谢谢先生!这是一个非常合理的解释。
    猜你喜欢
    • 2015-03-18
    • 1970-01-01
    • 2014-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多