【发布时间】:2015-06-30 08:34:57
【问题描述】:
好的,所以这个可能很难解释..
我要做的是计算每个班次第一个小时内的负载数量。我的意思是如果加载从 0630 开始,我想计算从 0630 到 0700 完成加载的次数。如果从 0705 开始加载,则计数将从 0705 到 0800 等等。
到目前为止,这是我必须使用的:
SELECT est.shift_date
,CASE est.shift_ident
WHEN '1' THEN 'D'
WHEN '2'THEN 'N'
END AS shift_ident
,min(est.start_timestamp) AS start
FROM equip_status_trans est
JOIN equip_status_code esc ON esc.status_code est.status_code
WHERE est.shift_date >= (getdate() - 180)
AND esc.status_desc 'LU Loading'
AND est.equip_ident IN (
'S803'
,'S804'
)
GROUP BY est.shift_date
,est.shift_ident
,est.equip_ident
忽略过滤器,我得到的是日期、班次标识和每个班次加载的开始时间戳。
我也有
SELECT est.shift_date
,CASE est.shift_ident
WHEN '1' THEN 'D'
WHEN '2' THEN 'N'
END AS shift_ident
,count(est.end_timestamp) AS count
,min(est.start_timestamp) AS start
FROM equip_status_trans est
JOIN equip_status_code esc ON esc.status_code = est.status_code
WHERE est.shift_date >= (getdate() - 180)
AND esc.status_desc = 'LU Loading'
AND est.equip_ident IN (
'S803'
,'S804'
)
GROUP BY est.shift_date
,est.shift_ident
,est.equip_ident
,datepart(hh, est.end_timestamp)
它为我提供了日期、班次标识、加载的开始时间戳以及每小时的加载次数。开始时间戳是每小时的最小加载时间戳,而不是每个班次的最小时间戳。
我遇到的问题是,每次我尝试加入两者时,它都会返回轮班期间每小时的负载计数,而不仅仅是第一个小时。
作为 SQL Server 的新手,最简单的方法是什么?
非常感谢
join 语句如下所示
SELECT est.shift_date,
CASE est.shift_ident
WHEN '1' THEN 'D'
WHEN '2' THEN 'N'
END as shift_ident,
min(est.start_timestamp) as start
, est.equip_ident, d1.count
FROM equip_status_trans est
join equip_status_code esc on esc.status_code = est.status_code
left outer join
(SELECT est2.shift_date,
CASE est2.shift_ident
WHEN '1' THEN 'D' WHEN '2' THEN 'N'
END as shift_ident
, count(est2.end_timestamp) as count
, min(est2.start_timestamp) as start
, est2.equip_ident
FROM equip_status_trans est2
join equip_status_code esc2 on esc2.status_code = est2.status_code
WHERE est2.shift_date >= (getdate() - 180)
and esc2.status_desc = 'LU Loading'
and est2.equip_ident IN('S803', 'S804')
GROUP BY est2.shift_date
, est2.shift_ident
, est2.equip_ident
, datepart(hh, est2.end_timestamp)
)d1 on est.start_timestamp = d1.start
WHERE est.shift_date >= (getdate() - 180)
and esc.status_desc = 'LU Loading'
and est.equip_ident IN('S803', 'S804')
GROUP BY est.shift_date, est.shift_ident, est.equip_ident, d1.count
【问题讨论】:
-
加入代码是什么样的?
-
刚刚添加到问题中
标签: sql-server join time count min