You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

需求:创建子查询或条件筛选secondz为0/30秒的SQL语句

两种实现筛选秒数为0/30记录的SQL方案

方案一:直接在WHERE子句添加筛选条件

这是最简洁的方式,直接在现有WHERE条件后追加对秒数的判断,无需额外子查询:

SELECT TOP (1000) 
    FloatTable.[DateAndTime],
    DATEPART(ss, FloatTable.[DateAndTime]) AS secondz,
    FloatTable.[TagIndex],
    FloatTable.[Val],
    TagTable.[TagName],
    TagTable.[TagType],
    TagTable.[TagDataType]
FROM [FactoryTalk_Datalog].[dbo].[FloatTable] as FloatTable
JOIN [FactoryTalk_Datalog].[dbo].[TagTable] as TagTable
    ON FloatTable.[TagIndex] = TagTable.[TagIndex]
WHERE 
    (TagTable.[TagName] = '[PLC]FI225'
    OR TagTable.[TagName] = '[PLC]FI250'
    OR TagTable.[TagName] = '[PLC]SS_FIT1109')
    AND TagTable.[TagIndex] = 17
    AND FloatTable.[DateAndTime] >= '04/01/2022'
    -- 新增:筛选秒数为0或30的记录
    AND DATEPART(ss, FloatTable.[DateAndTime]) IN (0, 30)

方案二:使用子查询筛选

如果需要先计算出secondz字段再做筛选,可以用子查询包裹原查询逻辑,在外层过滤目标秒数:

SELECT *
FROM (
    SELECT TOP (1000) 
        FloatTable.[DateAndTime],
        DATEPART(ss, FloatTable.[DateAndTime]) AS secondz,
        FloatTable.[TagIndex],
        FloatTable.[Val],
        TagTable.[TagName],
        TagTable.[TagType],
        TagTable.[TagDataType]
    FROM [FactoryTalk_Datalog].[dbo].[FloatTable] as FloatTable
    JOIN [FactoryTalk_Datalog].[dbo].[TagTable] as TagTable
        ON FloatTable.[TagIndex] = TagTable.[TagIndex]
    WHERE 
        (TagTable.[TagName] = '[PLC]FI225'
        OR TagTable.[TagName] = '[PLC]FI250'
        OR TagTable.[TagName] = '[PLC]SS_FIT1109')
        AND TagTable.[TagIndex] = 17
        AND FloatTable.[DateAndTime] >= '04/01/2022'
) AS TempTable
WHERE TempTable.secondz IN (0, 30)

注意:若数据量较大,方案一的性能更优,因为它直接在WHERE子句中过滤,避免了子查询的额外开销。

内容的提问来源于stack exchange,提问作者robertuxo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 09:35:23