尤鱼早起了吗 2023-01-11 01:39 采纳率: 100%
浏览 250
已结题

一个复杂的SQL查询 (想了半天实在想出来了,本人目前已经非常的疼苦 求解惑,付费有偿,逻辑正确,必采纳。)

一个复杂的SQL查询 (想了半天实在想出来了,本人目前已经非常的疼苦 求解惑,付费有偿,逻辑正确,必采纳。)
表数据为:

img

题目所需字段
CARD_ID(身份证)、TNAME(姓名) 、SCORES(分数)、OPENID(设备ID) 、INSERTTIME(提交成绩时间)
题目要求:
分数>=60分视为考试通过,有一次通过即为考核通过 OPENID重复的两个人视为一个人替另外一个人代考,设定第一次在某设备上提交成绩的人员为A,后续在该设备提交的成绩均为A帮助其他人员代考,成绩应为A的成绩,查询有哪几个人员帮助他人代考,这些人员的考核最高分是多少?结果列输出姓名、考核最高分。

我是这样写的

 
SELECT 
dbo.Test.TNAME,a.OPENID,a.SCORES,a.INSERTTIME 
FROM dbo.Test 
JOIN (
    SELECT 
    OPENID,MIN(INSERTTIME)AS INSERTTIME,MAX(SCORES) AS SCORES 
    FROM dbo.Test 
    GROUP BY OPENID 
    HAVING COUNT(OPENID)>1
     ) AS a 
ON dbo.Test.OPENID=a.OPENID AND a.INSERTTIME = Test.INSERTTIME

但是里面的数据还有空(陈十二),我不知道这么排除空,还有姓名是重复的(张三),所以这条SQL就不对了。
请各位老哥解惑,这SQL要怎么写啊。 SQL逻辑正确了,付费有偿!

  • 写回答

10条回答 默认 最新

  • wux_labs 2023-01-11 07:10
    关注

    为空你是想怎么排除,是不统计吗?张三是重复的,但证件号和设备ID都相同,应该认为是同一个人,不应该算代考,需要排除不进行统计。
    思路:第一步,凡是自己的考试记录,统统去掉,凡是自己帮别人考的统统保留,最终得到代考记录,以及考试设备;第二步,从代考设备上取第一次提交记录就是有帮助他人代考的人,代考设备上的最高分就是这个人的最高分。
    如果有用,望采纳,谢谢!

    SELECT TEST.TNAME,
           A.OPENID,
           A.SCORES,
           A.INSERTTIME
      FROM TEST
      JOIN (SELECT OPENID, -- 代考设备
                   MIN(INSERTTIME) AS INSERTTIME, -- 该设备的最小提交时间,认定为自己考的
                   MAX(SCORES) AS SCORES -- 该设备上提交的最高分数
              FROM TEST
             WHERE OPENID IN
                   (SELECT T1.OPENID --找出有代考行为的设备
                      FROM TEST T1
                     INNER JOIN TEST T2
                        ON T1.OPENID = T2.OPENID -- 根据设备进行关联,如果关联出多条记录,就说明这台设备提交过多次
                     WHERE NOT (T1.TNAME = T2.TNAME AND
                            ISNULL(T1.CARD_ID, '') = ISNULL(T2.CARD_ID, '')) -- 排除同一个人的提交,会排除张三的多次提交,也会排除自己提交的所有记录
                    ) --这里保留下来的都是代考记录
             GROUP BY OPENID
            HAVING COUNT(*) > 1 -- 这个Having其实可以不要了,因为本身就是有代考的记录
            ) AS A
        ON TEST.OPENID = A.OPENID -- 代考设备
       AND A.INSERTTIME = TEST.INSERTTIME -- 代考设备上的最早提交时间,本人的考试记录
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(9条)

报告相同问题?

问题事件

  • 系统已结题 1月20日
  • 已采纳回答 1月12日
  • 创建了问题 1月11日

悬赏问题

  • ¥15 2020长安杯与连接网探
  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)