首页 > 试题广场 >

已知某田径运动员某月训练表如下 表drill: id dat

[不定项选择题]
已知某田径运动员某月训练表如下
表drill:
id date kilometer
1 2020-07-01
10
2 2020-07-02
12
3 2020-07-03
11
4 2020-07-04
15

试查找与前一天的日期相比,千米数更高的所有日期的id和kilometer,下列SQL语句不正确的是()

  • SELECT d2.id,d2.kilometer

    FROM drill d1,drill d2

    WHERE DATEDIFF(d2.date,d1.date)=1

    AND d1.kilometer<d2.kilometer

  • SELECT d2.id,d2.kilometer

    FROM drill d1 CROSS JOIN drill d2

    ON DATEDIFF(d2.date,d1.date)=1

    WHERE d1.kilometer<d2.kilometer

  • SELECT d2.id,d2.kilometer

    FROM drill d1 JOIN drill d2

    ON( DATE_ADD(d2.date,INTERVAL 1 day)=1)

    WHERE d1.kilometer<d2.kilometer

  • SELECT d2.id,d2.kilometer

    FROM drill d1,drill d2

    WHERE DATEDIFF(d2.date,d1.date)=-1

    AND d1.kilometer<d2.kilometer

选项C错了吧,应该是:

SELECT d2.id,d2.kilometer
FROM drill d1 JOIN drill d2
ON( DATE_ADD(d1.date,INTERVAL 1 day)= d2.date)
WHERE d1.kilometer<d2.kilometer;
发表于 2022-02-07 11:03:59 回复(14)
DATEDIFF(d1,d2),计算日期 d1->d2 之间相隔的天数,d1-d2,负值说明前一个日期比后一个小,所以D的意思就是d2是前一天,d1是后一天,d1的kilometer小于d2的了
发表于 2021-12-24 16:17:06 回复(5)

DATE_ADD()函数
1、定义:函数向日期添加指定的时间间隔。
2、语法:DATE_ADD(date,INTERVAL expr type)

date 参数是合法的日期表达式。
expr 参数是希望添加的时间间隔。

type 参数可以是下列值:

SECOND
MINUTE
HOUR
DAY
WEEK
MONTH

YEAR
还有很多

3、例子:
select now();
#2021-11-13 22:44:28
select DATE_ADD(now(),INTERVAL 2 DAY);
#2021-11-15 22:44:28
发表于 2022-07-25 11:47:22 回复(0)
看了这道题的评论,有技术性问题的。但大部分的都是,要不实力不够,要不然就是。。。blindness了。技术性问题有Date_ADD的和datediff的,Date_ADD有人解释了,我来解释datediff
datediff函数有两种形式,分别适用于MySQL和SQL server
MySQL:Datediff(被减数,减数)
SQL server:Datediff(时间单位,减数,被减数)
得出的结果可以是负数(我也不知道为啥求日期呢设置个负数结果,日期还能倒回去啊。。。)
时间单位可以为,day,month,hour,minute,second等等
被减数、减数是date型的数据,形式为:yyyy-mm-dd,也可以为datetime型,为:yyyy-mm-dd hh:mm:ss (前date后time)
date型和datetime型的都可以用聚合函数进行比较
以及,最重要的一点,datetime类型中没有'xxxx-xx-xx 24:00:00'。换成次日0点表达的都一样
发表于 2022-08-26 18:59:25 回复(0)
DATEDIFF(d1,d2)计算日期 d1->d2 间隔天数=》d1-d2=-1 (负值说明前一个日期比后一个小),所以D的意思就是d2是前一天,d1是后一天,d1的kilometer小于d2的了
发表于 2022-01-07 11:14:55 回复(3)
正确语法为 DATE_ADD(date,INTERVAL expr type);date是合法的日期表达式,expr 参数是添加的时间间隔,type是时间间隔的单位(second , minute , hour ,day等)。C选项的写成如下方式应该就对了

SELECT d2.id,d2.kilometer

FROM drill d1 JOIN drill d2

ON( DATE_ADD(d2.date,INTERVAL 1 day)=d1.date)

WHERE d1.kilometer<d2.kilometer

发表于 2022-09-08 18:51:34 回复(0)

(1)select datediff(day ,'2018-08-01','2018-08-02');

结果:1

(2)select datediff(day ,'2018-08-02','2018-08-01');

结果:-1

发表于 2022-03-10 14:14:26 回复(4)
应该只有B正确
发表于 2023-05-26 12:01:48 回复(0)
datadiff(date1,date2)表示的是date1-date2的差值,前面的日期-后面的日期
发表于 2022-08-05 10:29:42 回复(0)
啊,是不正确的啊
发表于 2022-05-10 09:55:48 回复(0)
select id,kilometer
from drill
where kilometer>lag(kilometer,1,null) over(partition by date);
请问是否也可以用这个解法?
编辑于 2024-03-12 13:03:06 回复(0)
B选项,CROSS JOIN是哪个数据库的语法?
编辑于 2023-12-22 22:43:05 回复(0)
DATE_ADD(date, INTERVAL1 DAY) 向指定的时间date上,添加一天的时间,所以DATE_ADD(d2.date,INTERVAL 1 day)!=1
发表于 2022-10-03 13:07:20 回复(0)
cd完全相反怎么cd都对
发表于 2022-07-24 10:26:06 回复(0)
DATEDIFF(day, startday , endday) 返回开始日期,结束日期 两者之差,当startday 在 endday之前返回正值,否则返回 负值,解析搞反了吧
发表于 2022-07-21 12:08:38 回复(1)
c是啥意思,那个on后面
发表于 2021-12-29 20:58:59 回复(0)