powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск Where в диапазоне
15 сообщений из 15, страница 1 из 1
Поиск Where в диапазоне
    #39994756
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго дня! Зациклился на проблеме, не вижу решения. Необходимо отобрать данные в которых есть символ "-" во всех числах в выбранном диапазоне дат. У меня же формируются данные если есть хоть в одном числе в выбранном диапазоне дат есть символ "-". Прошу направить в нужную сторону...
Код: sql
1.
2.
 Where
 ob.data_ob >= DATEADD([day], -5, GETDATE()) and ob.sp='-'
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994759
felix_ff
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest,

Код: sql
1.
and charindex('-', ob.sp) > 0



хранить даты в с строковых типах - так себе затея
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994762
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest
Необходимо отобрать данные в которых есть символ "-" во всех числах в выбранном диапазоне дат.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
with cte as
(
 select
  ...,
  sum(case when ob.sp like '%-%' then 0 else 1 end) over () as c
 from
  ...
 where
  ob.data_ob >= DATEADD([day], -5, GETDATE())
)
select
 ...
from
 cte
where
 c = 0
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994801
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо! Прошу прощения, если не смог донести свою мысль правильно.
Даты не в с строковых типах. По условию
Код: sql
1.
and ob.sp='-' 

должны быть отобраны значения без данных, т.к. NULL нельзя, то ставят '-'. Необходимо отобрать данные в которых есть символ "-" во всех датах в выбранном диапазоне дат. А получается так:
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994819
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest,

даты - это названия колонок?
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994821
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Инвертируйте условие и выберите только те записи, для которых есть хотя бы одна запись, у которой ob.sp не равно черточке.
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994937
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владислав Колосов

даты - это названия колонок?

Верно. Это даты получаемые из диапазона
Код: sql
1.
ob.data_ob >= DATEADD([day], -5, GETDATE())



Гавриленко Сергей Алексеевич
Инвертируйте условие и выберите только те записи, для которых есть хотя бы одна запись, у которой ob.sp не равно черточке.

Чуть не понял. Получится то же, только в инверсии.

Спасибо за помощь!
На скрине только две строки заполнены правильно, помечены зеленым, в которых есть символ "-" во всех датах в выбранном диапазоне дат. Остальные сроки в запрос попасть не должны.
С выборкой на одно число эта схема работает исправно. А на диапазон...
В делфи я бы по каждой дате прошел бы циклом по строкам с пометками на совпадение, в конце - сколько циклов = столько совпадений - строки в отчет. Как здесь сделать - уже день голову ломаю...
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994956
stdvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
jonybest,

Проблема в том, что никто не может понять, чего вы хотите. Дайте код с заполнением данных и что должно быть на выходе.
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994971
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest
Как здесь сделать - уже день голову ломаю...
Ответы не читаем - 22190805 ?
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994974
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
[/quot]Ответы не читаем - 22190805 ?[/quot]
Читаю, пробую...
по коду дает 0 записей
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
with cte as
(
SELECT 
  sum(case when ob.sp = '-' then 0 else 1 end) over () as c,
  ob.data_ob,
  ob.sp
FROM
  List vtl
  LEFT OUTER JOIN List vil ON (vil.ini_id = vtl.ini_id)
  INNER JOIN ob ON (vtl.task = ob.zad)
WHERE
  ob.data_ob > DATEADD([day], -5, GETDATE())
  )
select
 *
from
 cte
where
 c = 0



Делаю проверку. По этому коду значение "с"=466 оно <>0 вот по чему в полном запросе результат =0
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  sum(case when ob.sp = '-' then 0 else 1 end) over () as c,
  ob.data_ob,
  ob.sp
FROM
  List vtl
  LEFT OUTER JOIN List vil ON (vil.ini_id = vtl.ini_id)
  INNER JOIN ob ON (vtl.task = ob.zad)
WHERE
  ob.data_ob > DATEADD([day], -5, GETDATE())
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39994987
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest
Делаю проверку. По этому коду значение "с"=466 оно <>0 вот по чему в полном запросе результат =0
Так сами же просили - только если во всех строках есть '-'.
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39995153
jonybest
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Конечный результат вашего запроса не отличается от моего
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT 
  
  ob.data_ob,
  ob.sp
FROM
  List vtl
  LEFT OUTER JOIN List vil ON (vil.ini_id = vtl.ini_id)
  INNER JOIN ob ON (vtl.task = ob.zad)
WHERE
  ob.data_ob > DATEADD([day], -5, GETDATE()) and ob.sp = '-'



По этим запросам если в диапазоне дат хоть в одной дате есть значение "-" то строка попадает в результат, а нужно чтобы в результат попадали только строки в которых в каждой дате есть значение "-" в диапазоне дат. Результат вывожу в кросс таблицу. Результат на скрине. Только две строки заполнены правильно, помечены зеленым, в которых есть символ "-" во всех датах в выбранном диапазоне дат. Остальные сроки в запрос попасть не должны.
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39995169
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest,

соберите уникальный список дат и убедитесь, что каждой дате по заданному идентификатору есть -. Получите список искомых идентификаторов.
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39995171
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
; with a as (
    SELECT 
      ob.data_ob,
      ob.sp
    FROM        List vtl
    LEFT JOIN   List vil ON (vil.ini_id = vtl.ini_id)
    INNER JOIN  ob       ON (vtl.task = ob.zad)
    WHERE
      ob.data_ob > DATEADD([day], -5, GETDATE()) 
)
select
    a.*
from    a
where
    not exists ( select * from a x where a.data_ob = x.data_ob and x.sp != '-' )



З.Ы. Там еще идентификатор чего-то должен быть, а не только дата. Сами подставите в cte и подзапрос.
...
Рейтинг: 0 / 0
Поиск Where в диапазоне
    #39995202
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
jonybest
Делаю проверку. По этому коду значение "с"=466 оно <>0


В запросе одно поле, в результате другое. Темните, батенька.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Поиск Where в диапазоне
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]