SQL, Поиск по дате и не существует - PullRequest
0 голосов
/ 06 января 2012

У меня есть две таблицы, и мне нужно искать все записи, которые существуют в одной таблице в другой таблице, по idProduct, только если date (dateStamp) меньше или старше 7 дней.

Поскольку APIЯ использую ограничено только обработкой 3000 результатов за один раз, приложение закроется, и в следующий раз, когда я буду запускать приложение, я хочу только те idProducts, которые говорят 3000 или больше для этого idProduct, это будет выполняться много раз дляКод поставщика, скорее всего, уже существует в таблице.

Итак, я смотрел на функции не существует и функции getdate в sql, но не смог получить желаемых результатов.

SELECT
   *
FROM
   products
WHERE
   (active = - 1)
   AND suppliercode = 'TIT'
   and (NOT EXISTS
     (SELECT
         idProduct
      FROM compare
      WHERE
         (products.idProduct = idProduct)
         OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE()))))

Любые указатели были бы хороши, я изменил ИЛИ на И, но это, кажется, не возвращает правильные результаты.

Ответы [ 3 ]

1 голос
/ 06 января 2012

Я предполагаю, что вы хотите сопоставить строки в двух таблицах на idProduct, так как сейчас ваш внутренний запрос (NOT EXISTS (SELECT idProduct FROM compare WHERE (products.idProduct = idProduct) OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE())))) выглядит так, как будто он находит все строки, которые не совпадают. Поскольку ваш подзапрос находит все строки, которые соответствуют или где дата старше 7 дней, и проверяет, что они не существуют.

Это то, что вы хотите?

SELECT * 
FROM products as p
LEFT JOIN compare as c
    ON p.idProduct = c.idProduct
WHERE p.active = -1 and p.suppliercode = 'TIT' and c.dateStamp < DATEADD(DAY,-7,GETDATE())
0 голосов
/ 06 января 2012

Вместо этого попробуйте НЕ В:

...
and ProductId NOT IN 
     (SELECT 
         idProduct 
      FROM compare 
      WHERE 
         (products.idProduct = idProduct) 
         OR (compare.dateStamp < DATEADD(DAY,-7,GETDATE())))) 
....
0 голосов
/ 06 января 2012

Вы уже пробовали это?

SELECT * FROM products 
WHERE (active = - 1) AND 
suppliercode = 'TIT'   
and ipProduct NOT IN 
(
   SELECT idProduct FROM compare 
   WHERE 
   (products.idProduct = idProduct) OR 
   (compare.dateStamp < DATEADD(DAY,-7,GETDATE()))
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...