1

Here is the query:-

SELECT *  FROM table 
WHERE CutOffDate > '2013-05-23 00:00:00.001'
   AND Zone = 1
  OR id IN (SELECT id FROM table 
            WHERE  Zone = 1 
               and status = 1)

All i need is all records greater than cutoffdate in same Zone. Also if any record from same zone has status 1. And records are from same Table.

The above query is working fine. But I am hoping there is definitely a better way to write this kind of query.

4

6 回答 6

2

同区是什么意思?和什么一样??查询的编写方式似乎是指区域 1。

如果是这样,那么你已经把它复杂化了。我相信你可以试试

SELECT *  FROM table 
WHERE Zone = 1
  And (status = 1 Or  CutOffDate 
        > '2013-05-23 00:00:00.001')
于 2013-05-24T13:22:59.570 回答
1

从逻辑上讲,您的查询相当于:

SELECT *  FROM table 
WHERE Zone = 1
AND (CutOffDate > '2013-05-23 00:00:00.001' OR status = 1)
于 2013-05-24T13:24:35.933 回答
0

你可以这样重写它:

SELECT
    *
FROM table
WHERE CutOffDate > '2013-05-23 00:00:00.001'
AND (
    Zone = 1
    OR
    Status = 1
)

但我猜您的原始查询并没有真正按照您的预期做......

编辑:以防万一你真的认为你的查询没有完成这项工作,这个可能:

SELECT
    *
FROM table AS T1
WHERE T1.CutOffDate > '2013-05-23 00:00:00.001'
AND EXISTS (
    SELECT TOP(1)
        1
    FROM table AS T2
    WHERE T2.Zone = T1.Zone
    AND T2.Status = 1
)
于 2013-05-24T13:19:43.123 回答
0

在截止日期之后,或同一区域中状态为 1 的行:

SELECT  *  
FROM    YourTable yt1
WHERE   CutOffDate > '2013-05-23 00:00:00.001'
        OR EXISTS
        (
        SELECT  *
        FROM    YourTable yt2
        WHERE   yt1.Zone = yt2.Zone
                AND yt2.status = 1
        )

如果这不是您要找的,请澄清您的问题。:)

于 2013-05-24T13:22:08.067 回答
0
SELECT * FROM [table] 
    WHERE Zone = 1
        AND
           (CutOffDate > '2013-05-23 00:00:00.001'
            OR  status = 1)

这与您问题中的查询相同。除了这个,我真的无法说出你的意思。

于 2013-05-24T13:22:55.173 回答
0

假设id在原始表中是唯一的,那么您的逻辑相当于:

SELECT *
FROM table 
WHERE (CutOffDate > '2013-05-23 00:00:00.001' AND Zone = 1)
      or (zone = 1 and status = 1);

您可以进一步简化为:

SELECT *
FROM table 
WHERE zone = 1 and
       (CutOffDate > '2013-05-23 00:00:00.001' or status = 1);

如果 id 不是唯一的,那么您的查询是满足您需要的好方法。或者,您可以使用窗口函数来表达查询。

于 2013-05-24T13:23:27.773 回答