我正在试图弄清楚如何完成我的查询。任何帮助将不胜感激!
这就是我现在所使用的。
SELECT
co, queuedTime, startTime, completeTime,
DATEDIFF(MINUTE, queuedTime, completeTime) AS elapsedTime
FROM
SJob
WHERE
jobClass = 'PayrollFinish'
AND DATEDIFF(DAY, queuedTime, GETDATE()) = 0
ORDER BY
queuedTime
唯一的问题是我需要queuedTime
job class = submitpayroll
和completeTime
jobclass = payrollfinish
我是sql的新手,只是在翻阅我的方式。
答案 0 :(得分:1)
所以你的查询会是这样的吗?
SELECT
co,
queuedTime,
startTime,
completeTime,
DATEDIFF(MINUTE, queuedTime, completeTime) AS elapsedTime
FROM
SJob
WHERE
jobClass = 'PayrollFinish' AND
DATEDIFF(DAY,queuedTime,GETDATE())=0
and jobClass = 'submitpayroll' AND jobclass = 'payrollfinish'
ORDER BY
queuedTime
答案 1 :(得分:0)
如果您只想要其中一次,那么这应该可以解决问题。
SELECT co,
CASE time
WHEN jobClass = 'SubmitPayroll' THEN queuedTime
WHEN jobClass = 'PayrollFinish' AND DATEDIFF(DAY, queuedTime, GETDATE()) = 0 THEN completeTime
ELSE 'N/A'
END,
startTime,
DATEDIFF(MINUTE, queuedTime, completeTime) AS elapsedTime
FROM SJob
ORDER BY queuedTime
答案 2 :(得分:0)
捅了一下,因为我假设你想要两个不同记录的数据。
SELECT
js.co,
js.queuedTime,
js.startTime,
je.completeTime,
DATEDIFF(MINUTE, js.queuedTime, je.completeTime) AS elapsedTime
FROM
SJob js
JOIN SJob je ON js.co = je.co -- Assuming this is the joining column
JOIN (SELECT
CAST(CONVERT(VARCHAR(50), GETDATE(), 101) AS DATETIME) StartDate,
CAST(CONVERT(VARCHAR(50), GETDATE() + 1, 101) AS DATETIME) EndDate) AS date
ON ((js.queuedTime >= date.StartDate AND js.queuedTime < date.endDate) OR
(je.queuedTime >= date.StartDate AND je.queuedTime < date.endDate))
WHERE
js.jobClass = 'SubmitPayroll' AND
je.jobClass = 'PayrollFinish'
ORDER BY
js.queuedTime
首先,因为它们似乎是两个单独的记录,所以你需要两次点击表格(一次用于SubmitPayroll
,另一次用于PayrollFinish
记录。因为我不知道你的是什么架构看起来像,我拍摄了哪一列加入它们。
其次,由于SubmitPayroll
和PayrollFinish
记录不同,我不确定您是否希望在该特定日期内开始或完成任务。
第三,如果您想要返回所有提交记录,无论他们是否具有匹配的完成记录,只需将JOIN SJob je
转换为LEFT OUTER JOIN
,您就可以获得所需(尽管您' d ISNULL
的{{1}}也需要DATEDIFF
。
同样,这是一个黑暗中的镜头,没有关于你的架构/数据的更多信息,但希望这可以让你更接近你需要的。