SQL 2 where子句

时间:2012-12-20 20:09:46

标签: sql where

我正在试图弄清楚如何完成我的查询。任何帮助将不胜感激!

这就是我现在所使用的。

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 = submitpayrollcompleteTime jobclass = payrollfinish

我是sql的新手,只是在翻阅我的方式。

3 个答案:

答案 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记录。因为我不知道你的是什么架构看起来像,我拍摄了哪一列加入它们。

其次,由于SubmitPayrollPayrollFinish记录不同,我不确定您是否希望在该特定日期内开始或完成任务。

第三,如果您想要返回所有提交记录,无论他们是否具有匹配的完成记录,只需将JOIN SJob je转换为LEFT OUTER JOIN,您就可以获得所需(尽管您' d ISNULL的{​​{1}}也需要DATEDIFF

同样,这是一个黑暗中的镜头,没有关于你的架构/数据的更多信息,但希望这可以让你更接近你需要的。