我遇到了正确的sql查询问题。首先,我得到了汽车零件工厂,人们创建和注册每个零件。应列出所有至少使用此模型生成该部分的用户。我需要的是给我的表:
列:
用户ID< ---用户ID,根据零件模型而成为部件。
从具有该用户ID的所有记录中选择最短时间< ---选择最短持续时间。 (循环认为每行都有该用户ID并找到)
从具有该用户ID的所有记录制作部分< ---的最长时间选择最长持续时间。 (循环认为每行都有该用户ID并找到)
制作零件的平均时间< ---使用相同的用户ID添加所有记录持续时间并从所有记录数除以。
零件数量< ---该模型由该用户制成的零件数量。
现在我有sql statemet,它给了我所有没有成功的工作人员。
SELECT dd.user_id AS user_id,dar.name AS name,
dar.surname AS surname,dd.duration AS duration
FROM tblPart AS d
INNER JOIN tblUserPart ON dd ON d.part_id = dd.part_id
INNER JOIN tblUser AS dar ON dd.user_id = dar.user_id
WHERE d.part_model='SST32KTF'
使用此SQL的数据:http://postimg.org/image/i3w663b1b/
答案 0 :(得分:2)
您(通常)不必在SQL中自己编写循环。你告诉系统你想要什么,而不是怎么做:
SELECT dd.user_id AS user_id,dar.name AS name,
dar.surname AS surname,minD,maxD,avgD,Cnt
FROM tblPart AS d
INNER JOIN (
SELECT
part_id,user_ud,
MIN(duration) as minD, MAX(duration) as maxD,
AVG(duration) as avgD, COUNT(*) as Cnt
from tblUserPart
group by part_id,user_id) dd ON d.part_id = dd.part_id
INNER JOIN tblUser AS dar ON dd.user_id = dar.user_id
WHERE d.part_model='SST32KTF'
查看了您的图片后,我现在看到您的模型中的duration
被存储为time
。这不正确使用time
数据类型。 time
用于存储时间,不一个时间间隔。目前,在SQL Server中,存储间隔的数据类型并不是很好。最好的方法是将duration
存储在int
列中,并可能将其重命名为durationMins
或durationSecs
。将其保留为time
列可能会在将来导致更多问题。
要将其转换为动态,请使用DATEDIFF(minute,'00:00:00',duration)
转换为持续时间,使用DATEDIFF(second,'00:00:00',duration)
,只要我在上述查询中使用了普通duration
。
答案 1 :(得分:0)
SELECT
dd.user_id AS user_id,ar.name AS name,dar.surname AS surname,
MAX(
(DATEPART(HOUR, dd.duration) * 3600) +
(DATEPART(MINUTE, dd.duration) * 60) +
(DATEPART(SECOND, dd.duration))
) AS maxduration,
MIN( (DATEPART(HOUR, dd.duration) * 3600) +
(DATEPART(MINUTE, dd.duration) * 60) +
(DATEPART(SECOND, dd.duration))
) AS minduration,
AVG(
(DATEPART(HOUR, dd.duration) * 3600) +
(DATEPART(MINUTE, dd.duration) * 60) +
(DATEPART(SECOND, dd.duration))
) AS avgduration,
COUNT(*) As PartsCount
FROM tblPart AS d
INNER JOIN tblUserPart ON dd ON d.part_id = dd.part_id
INNER JOIN tblUser AS dar ON dd.user_id = dar.user_id
WHERE d.part_model='SST32KTF'
GROUP BY dd.user_id,ar.name,dar.surname