波仔发财 2022-08-03 10:31 采纳率: 66.7%
浏览 36
已结题

SQLserver加个判断

SELECT count(distinct lp.lot_number)as ELzs
FROM (SELECT lp.lot_number,lp.TransDate,lp.WorkorderId ,lp.device_number,
ROW_NUMBER() OVER( PARTITION BY lp.lot_number ORDER BY lp.TransDate)RN FROM Lot_Process lp)lp
WHERE RN=2 and (lp.WorkorderId like'PB%' or lp.WorkorderId like'DB%') and
lp.device_number in('M1-EL1-L1-01','M1-EL1-L1-02')
and lp.TransDate between convert(varchar(11),dateadd(day,-1,getdate()),120)+'08:00:00'
and convert(varchar(11),dateadd(day,-1,getdate()),120)+'19:59:59'

给帮忙加个判断,每天9点之前查询昨天8点到昨天20点,9点之后查询今天8点到今天20点。

  • 写回答

1条回答 默认 最新

  • yadedoo 2022-08-03 15:04
    关注

    两种方案:

    1、内嵌判断条件

    SELECT COUNT(DISTINCT LP.LOT_NUMBER) AS ELZS
    FROM (
             SELECT LP.LOT_NUMBER,
                    LP.TRANSDATE,
                    LP.WORKORDERID,
                    LP.DEVICE_NUMBER,
                    ROW_NUMBER()
                            OVER (PARTITION BY LP.LOT_NUMBER
                                ORDER BY LP.TRANSDATE
                                ) RN
             FROM LOT_PROCESS LP
         ) LP
    WHERE RN = 2
      AND (LP.WORKORDERID LIKE 'PB%'
        OR LP.WORKORDERID LIKE 'DB%')
      AND LP.DEVICE_NUMBER IN ('M1-EL1-L1-01', 'M1-EL1-L1-02')
      AND LP.TRANSDATE
        BETWEEN CONVERT(VARCHAR(11),
                        DATEADD(DAY, CASE WHEN CONVERT(varchar(100), GETDATE(), 24) < '09:00:00' THEN - 1 ELSE 0 END,
                                GETDATE()), 120) + '08:00:00'
        AND CONVERT(VARCHAR(11), DATEADD(
                                         DAY,
                                         CASE WHEN CONVERT(varchar(100), GETDATE(), 24) < '09:00:00' THEN - 1 ELSE 0 END,
                                         GETDATE()), 120) + '19:59:59';
    
    

    2、分别判断,然后再UNION ALL

    SELECT COUNT(DISTINCT LP.LOT_NUMBER) AS ELZS
    FROM (
             SELECT LP.LOT_NUMBER,
                    LP.TRANSDATE,
                    LP.WORKORDERID,
                    LP.DEVICE_NUMBER,
                    ROW_NUMBER()
                            OVER (PARTITION BY LP.LOT_NUMBER
                                ORDER BY LP.TRANSDATE
                                ) RN
             FROM LOT_PROCESS LP
         ) LP
    WHERE RN = 2
      AND (LP.WORKORDERID LIKE 'PB%'
        OR LP.WORKORDERID LIKE 'DB%')
      AND LP.DEVICE_NUMBER IN ('M1-EL1-L1-01', 'M1-EL1-L1-02')
      AND LP.TRANSDATE
        BETWEEN CONVERT(VARCHAR(11), DATEADD(DAY, - 1, GETDATE()), 120) + '08:00:00'
        AND CONVERT(VARCHAR(11), DATEADD(DAY, -1, GETDATE()), 120) + '19:59:59'
      AND CONVERT(varchar(100), GETDATE(), 24) < '09:00:00'
    UNION ALL
    SELECT COUNT(DISTINCT LP.LOT_NUMBER) AS ELZS
    FROM (
             SELECT LP.LOT_NUMBER,
                    LP.TRANSDATE,
                    LP.WORKORDERID,
                    LP.DEVICE_NUMBER,
                    ROW_NUMBER()
                            OVER (PARTITION BY LP.LOT_NUMBER
                                ORDER BY LP.TRANSDATE
                                ) RN
             FROM LOT_PROCESS LP
         ) LP
    WHERE RN = 2
      AND (LP.WORKORDERID LIKE 'PB%'
        OR LP.WORKORDERID LIKE 'DB%')
      AND LP.DEVICE_NUMBER IN ('M1-EL1-L1-01', 'M1-EL1-L1-02')
      AND LP.TRANSDATE
        BETWEEN CONVERT(VARCHAR(11), GETDATE(), 120) + '08:00:00'
        AND CONVERT(VARCHAR(11), GETDATE(), 120) + '19:59:59'
      AND CONVERT(varchar(100), GETDATE(), 24) >= '09:00:00';
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 8月12日
  • 已采纳回答 8月4日
  • 创建了问题 8月3日

悬赏问题

  • ¥15 远程桌面文档内容复制粘贴,格式会变化
  • ¥15 关于#java#的问题:找一份能快速看完mooc视频的代码
  • ¥15 这种微信登录授权 谁可以做啊
  • ¥15 请问我该如何添加自己的数据去运行蚁群算法代码
  • ¥20 用HslCommunication 连接欧姆龙 plc有时会连接失败。报异常为“未知错误”
  • ¥15 网络设备配置与管理这个该怎么弄
  • ¥20 机器学习能否像多层线性模型一样处理嵌套数据
  • ¥20 西门子S7-Graph,S7-300,梯形图
  • ¥50 用易语言http 访问不了网页
  • ¥50 safari浏览器fetch提交数据后数据丢失问题