做个统计GPS考勤位置的统计。
考勤记录表如下id GPS
1 123.32356
1 123.32379
1 123.40267
2 123.55478
2 123.32489 我想统计某人在几个地方打了几次卡,取GPS前6位为比较基准
员工1 在两个地址打3次,员工2 在两个地方打两次
希望得到
ID GPS 该处打卡次数
1 123.32 2
1 123.40 1
2 123.55 1
2 123.32 1类似这样吧,如果能够下面这样就更好了
ID GPS 该处次数 几个地点
1 123.32 2 2
1 123.40 1 2
2 123.55 1 2
2 123.32 1 2我用的SQL08 语句:(没办法 distinct 只能放开头,顺序无所谓了 )
select
distinct convert(CHAR(6),gps) ,ID , count( convert(CHAR(6))
得到的是GPS ID 该处打卡几次
123.32 1 1
123.32 1 1
123.40 1 1
123.55 2 1
123.32 2 1很明显 打卡次数列虽然用convertt转换,但是count函数实际比较的还是整个字符串没有真的只取6位
( left ( GPS, 6 ) )效果一样。
我发现 distinct 是真的好使的,真的只计算取的6位,无奈distinct只能在开头用一次。
求教!
考勤记录表如下id GPS
1 123.32356
1 123.32379
1 123.40267
2 123.55478
2 123.32489 我想统计某人在几个地方打了几次卡,取GPS前6位为比较基准
员工1 在两个地址打3次,员工2 在两个地方打两次
希望得到
ID GPS 该处打卡次数
1 123.32 2
1 123.40 1
2 123.55 1
2 123.32 1类似这样吧,如果能够下面这样就更好了
ID GPS 该处次数 几个地点
1 123.32 2 2
1 123.40 1 2
2 123.55 1 2
2 123.32 1 2我用的SQL08 语句:(没办法 distinct 只能放开头,顺序无所谓了 )
select
distinct convert(CHAR(6),gps) ,ID , count( convert(CHAR(6))
得到的是GPS ID 该处打卡几次
123.32 1 1
123.32 1 1
123.40 1 1
123.55 2 1
123.32 2 1很明显 打卡次数列虽然用convertt转换,但是count函数实际比较的还是整个字符串没有真的只取6位
( left ( GPS, 6 ) )效果一样。
我发现 distinct 是真的好使的,真的只计算取的6位,无奈distinct只能在开头用一次。
求教!
as
(select 1 as id,123.32356 as gps
union
select 1 as id,123.32379 as gps
union select 1 as id,123.40267 as gps
union select 2 as id,123.55478 as gps
union select 2 as id,123.32489 as gps
)select id,cast(gps as numeric(18,2)) gps,COUNT(1) 该处打卡次数 from Cr_a group by id,cast(gps as numeric(18,2))
order by id,gps
WITH CTE(id,GPS) AS(
SELECT 1,'123.32356'
UNION ALL SELECT 1,'123.32379'
UNION ALL SELECT 1,'123.40267'
UNION ALL SELECT 2,'123.55478'
UNION ALL SELECT 2,'123.32489'
)
SELECT CTE.id,LEFT(CTE.GPS,6),COUNT(*),
COUNT(*) OVER (PARTITION BY id) AS Place
FROM CTE
GROUP BY CTE.id,LEFT(CTE.GPS,6)
感谢2楼告知 count(*) 就行,真不知道....我原来以为是let 等方法取的左截位并不准确,还以为count 统计整个数,而不是取的位数。
后来发现原来是最后的group by 语句写的有问题,必须 group by ( left ( GPS, 6 ) 这样才有效果,只 group by GPS不行。
SQL太闹腾,已经被group by折腾懵过无数次了下面两位大神的解答我也实验一下,一并感谢!
我得先去查 with as 啥意思,看了半天都忘了我的问题是啥了,能推荐含有with as这种函数的SQL书么?最好是SQL2014
国内的书大部分太扯淡了,换个号码,05\08\14就发行,内容都不改。