今天回看以前的SQL语句.在下面的条件里面有些不太明白.在注释的地方有几个地方不明白意思了.麻烦讲解一下select top 100 percent *,
rn=row_number() over(partition by Numbers,convert(varchar(10),排序时间,120) order by 排序时间)
from
(
select *,
case when
(select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
where
a.numbers=AttendanceTimeRecords.numbers --条件立即就这样指定.这里让我感觉自己指定到自己的意思.
and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
--不明白这里的作用.
)%2=0
and NOT exists (
select * from
AttendanceTimeRecords a --又是指定别名为a
where
a.numbers=AttendanceTimeRecords.numbers--感觉又是自己指定自己,为啥要这样做,作用是什么呢?在这里我看起来a变成临---时表了.难道别名可以作临时表的吗?
and a.SwipeDateTime< AttendanceTimeRecords.SwipeDateTime and
datediff(day,a.SwipeDateTime,AttendanceTimeRecords.SwipeDateTime)=0
)
then dateadd(mi,-1,convert(varchar(10),SwipeDateTime,120))
else SwipeDateTime end as 排序时间
from AttendanceTimeRecords
) b
order by numbers,SwipeDateTime
rn=row_number() over(partition by Numbers,convert(varchar(10),排序时间,120) order by 排序时间)
from
(
select *,
case when
(select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
where
a.numbers=AttendanceTimeRecords.numbers --条件立即就这样指定.这里让我感觉自己指定到自己的意思.
and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
--不明白这里的作用.
)%2=0
and NOT exists (
select * from
AttendanceTimeRecords a --又是指定别名为a
where
a.numbers=AttendanceTimeRecords.numbers--感觉又是自己指定自己,为啥要这样做,作用是什么呢?在这里我看起来a变成临---时表了.难道别名可以作临时表的吗?
and a.SwipeDateTime< AttendanceTimeRecords.SwipeDateTime and
datediff(day,a.SwipeDateTime,AttendanceTimeRecords.SwipeDateTime)=0
)
then dateadd(mi,-1,convert(varchar(10),SwipeDateTime,120))
else SwipeDateTime end as 排序时间
from AttendanceTimeRecords
) b
order by numbers,SwipeDateTime
select top 100 percent *,
rn=row_number() over(partition by Numbers,convert(varchar(10),排序时间,120) order by 排序时间)
from
(
select *,
case when
(select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
where
a.numbers=AttendanceTimeRecords.numbers --AttendanceTimeRecords的表指的是 倒数第三行的那个表 --条件立即就这样指定.这里让我感觉自己指定到自己的意思.
and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
--不明白这里的作用.
)%2=0
and NOT exists (
select * from AttendanceTimeRecords a --又是指定别名为a --这个A和上面的那个A是不同的
where
a.numbers=AttendanceTimeRecords.numbers --这个同上面的用法 --感觉又是自己指定自己,为啥要这样做,作用是什么呢?在这里我看起来a变成临---时表了.难道别名可以作临时表的吗?
and a.SwipeDateTime< AttendanceTimeRecords.SwipeDateTime and
datediff(day,a.SwipeDateTime,AttendanceTimeRecords.SwipeDateTime)=0
)
then dateadd(mi,-1,convert(varchar(10),SwipeDateTime,120))
else SwipeDateTime end as 排序时间
from AttendanceTimeRecords
) b
order by numbers,SwipeDateTime
select count(*) from AttendanceTimeRecords a --这里把AttendanceTimeRecords指别名为a
where
a.numbers=AttendanceTimeRecords.numbers --AttendanceTimeRecords的表指的是 倒数第三行的那个表 --条件立即就这样指定.这里让我感觉自己指定到自己的意思.
and a.SwipeDateTime<= AttendanceTimeRecords.SwipeDateTime --这里也是一样.难道这个这个a成临时表了吗?
--不明白这里的作用. --这个语句块的查询出符合条件的记录数跟2去余数,比较余数是不是等于0
select * from AttendanceTimeRecords a --又是指定别名为a --这个A和上面的那个A是不同的
where
a.numbers=AttendanceTimeRecords.numbers --这个同上面的用法
--感觉又是自己指定自己,为什么要这样做?
--在这里我看起来a变成临表了,是不是这样呢?
-如果是临时表了.难道别名可以作临时表的吗?
简单的说是自连接比如数据表T
A B C
1 1 2
1 2 3
2 2 1
要得到A相同,B最大的所有列
1 2 3
2 2 1
这时候可以这样写
SELECT * FROM T A WHERE B=(SELECT MAX(B) FROM T WHERE A=T.A)
select * from AttendanceTimeRecords a
--又是指定别名为a --这个A和上面的那个A是不同的
where
a.numbers=AttendanceTimeRecords.numbers
--这个同上面的用法
--感觉又是自己指定自己,为什么要这样做?
--在这里我看起来a变成临表了,是不是这样呢?
--如果是临时表了.难道别名可以作临时表的吗?我是想知道我注释的意思
如果参与join的两个表是同一个表(自连接),则至少要给其中一个表设置别名,否则无法区分这两个表--在这里我看起来a变成临表了,是不是这样呢?
不是临时表,可以理解为内存里,根据AttendanceTimeRecords复制了一了一个新表,不过给他重新起了个名字叫A (别名)--如果是临时表了.难道别名可以作临时表的吗?
不是临时表