架构: ID,int(PK) datSample,datetime fltValue,float
我有一张示例数据表。
有时不会捕获样本值,并且记录的fltValue = NULL将被标记为无效。
我需要在以下日期范围内运行报告{datRptStart,datRptEnd}
我必须提取&显示{datRptStart,datRptEnd}范围内的第一个和最后一个VALID datSample日期时间。
我需要在报告中显示/绘制有效值和无效值
示例数据:
答案 0 :(得分:0)
这是通用SQL,用您的表名替换tablename
。你用的是什么数据库?在与oracle合作之间,对于其他数据库,您可能需要使用> =和< =
Select ID,datSample, fltValue from tablename where
datSample between datRptStart and datRptEnd
order by datSample
答案 1 :(得分:0)
SELECT TOP 1 datSample 来自tblTankLevel WHERE datSample> ='2018-01-01'AND datSample< ='2018-01-10'和 fltSample不是NULL ORDER BY datSample ASC
SELECT TOP 1 datSample 来自tblTankLevel WHERE datSample> ='2018-01-01'AND datSample< ='2018-01-10'和 fltSample不是NULL ORDER BY datSample DESC
答案 2 :(得分:0)
SELECT * FROM tblTankLevel
WHERE ID >= (SELECT MIN(ID) AS minId
FROM tblTankLevel
WHERE datSample > @datRptStart
AND datSample < @datRptEnd
AND fltSample IS NOT NULL)
AND ID <= (SELECT MAX(ID) AS maxId
FROM tblTankLevel
WHERE datSample > @datRptStart AND datSample < @datRptEnd
AND fltSample IS NOT NULL)
答案 3 :(得分:0)
我必须提取&amp;显示{datRptStart,datRptEnd}范围内的第一个和最后一个VALID datSample日期时间。
这可以通过all all来完成 - 使用all,因为我们不知道这里的完整数据集。假设datRptStart和datRptEnd存储在另一个可访问的表中,您可以执行以下操作:
select
'first' as position
,sd.id as id
,min(sd.datsample) as datsample
,sd.fltsample as fltsample
from
sampledata sd
where
sd.fltsample between (select datRptStart from tab) and (select datRptEnd from tab)
group by
sd.id
,sd.datsample
union all
select
'last' as position
,sd_.id as id
,max(sd_.datsample) as datsample
,sd_.fltsample as fltsample
from
sampledata sd_
where
sd_.fltsample between (select datRptStart from tab) and (select datRptEnd from tab)
group by
sd_.id
,sd_.fltsample