mysql刷题记录(4)

呼延海 2022-09-30 18:09:15

 197. 上升的温度

 

select a.ID
from weather as a cross join weather as b 
#设置连表查询
     on datediff(a.recordDate, b.recordDate) = 1
#设置查询条件
where a.Temperature > b.Temperature;
#筛选条件

乍一看此题并不难,但细想的话需要解决两个问题,

  1. 怎么获取到前一天的数据
  2. 怎么对日期进行比较

对日期的比较相对简单,这里介绍一个函数:

datediff(日期1,日期2)

得到的结果是日期1与日期2相差的天数。

如果日期1比日期2大,结果为正;如果日期1比日期2小,结果为负。 

例:select datediff('2020-2-2','2020-2-1') as a,返回值为1

timestampdiff(时间类型, 日期1, 日期2)

和上面diffdate的正、负号规则刚好相反。

日期1大于日期2,结果为负,日期1小于日期2,结果为正。

在“时间类型”的参数位置,通过添加“day”, “hour”, “second”等关键词,来规定计算天数差、小时数差、还是分钟数差。

交叉查询

使用交叉联结会将两个表中所有的数据两两组合。

这里我们只需要让“两个”表都是日期表即可,并设置查询条件为两者相差一天

607. 销售员

SELECT
    s.name
FROM
    salesperson s
WHERE
    s.sales_id NOT IN (SELECT
            o.sales_id
        FROM
            orders o
                LEFT JOIN
            company c ON o.com_id = c.com_id
        WHERE
            c.name = 'RED')
;

 总共有三个表,先用总表和公司表联合查询,将含有“RED”的数据行找出来,之后再将员工表中的那个id去除即可

...全文
38 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
CSDN-Ada助手 2023-01-13
  • 打赏
  • 举报
回复
您可以前往 CSDN问答-大数据 发布问题, 以便更快地解决您的疑问

67,732

社区成员

发帖
与我相关
我的任务
社区描述
灌水发信息每周送书 灌水发干货每周送惊喜 谁最水过年送大礼 谁最硬核过年送大礼 谁最贡献过年送大礼
社区管理员
  • 1_bit
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

我们“新手村”社区就是大家的孵化器

你们学习,我来评分

每周最高分送一本书

每月第四周送一份机械键盘

咱们新手村使用一切狂暴手段让优秀的人得到奖励

 

试试用AI创作助手写篇文章吧