powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQL [закрыт для гостей] / Спаситеее
51 сообщений из 51, показаны все 3 страниц
Спаситеее
    #1664887
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть таблица.dbf

id | data
------------------
1 | 01.12.26
1 | 01.14.26
7 | 01.14.26
2 | 01.18.26
7 | 01.15.26

нужно запросом SELECT ....... where Id <> 1 and data > {^2026.01.12} получить ближайшую MIN(дату) из имеющихся, где нет Id = 1, т.е. 01.15.26
...
Рейтинг: 0 / 0
Спаситеее
    #1665309
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  15.02.2026, 15:15:55
[игнорируется]
Есть таблица.dbf

id | data
------------------
1 | 01.12.26
1 | 01.14.26
7 | 01.14.26
2 | 01.18.26
7 | 01.15.26

нужно запросом SELECT ....... where Id <> 1 and data > {^2026.01.12} получить ближайшую MIN(дату) из имеющихся, где нет Id = 1, т.е. 01.15.26
слушай сюда, пизда
Ближайшая дата по условию будет 01.14.26, а не 01.15.26

SELECT MIN(data) AS nearest_date
FROM таблица
WHERE id <> 1;
...
Изменено: 15.02.2026, 21:38:19 - defecator
Рейтинг: 0 / 0
Спаситеее
    #1665325
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
defecator  15.02.2026, 21:36:10
[игнорируется]
Ближайшая дата по условию будет 01.14.26
ты кое-что забыл , у этой даты ID=1 :)))
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1665329
Испытатель диванов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator [игнорируется] 

мог бы и нормально ответить без мата
...
Рейтинг: 0 / 0
Спаситеее
    #1665344
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator [игнорируется] 

Ближайшая дата по условию будет 01.15.26 т.к. 14.01 имеется Id=1, f по условию Id<>1 (ну и кто из нас пизда, можешь не отвечать)
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1665353
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  15.02.2026, 15:15:55
[игнорируется]
Есть таблица.dbf

id | data
------------------
1 | 01.12.26
1 | 01.14.26
7 | 01.14.26
2 | 01.18.26
7 | 01.15.26

нужно запросом SELECT ....... where Id <> 1 and data > {^2026.01.12} получить ближайшую MIN(дату) из имеющихся, где нет Id = 1, т.е. 01.15.26
Что всё-таки понимается под "ближайшей датой"?
Согласно вашему условию, MIN(датой) для всех записей с Id <> 1 является 01.14.26, а не 01.15.26.

Если же под ближайшей датой понимается дата в прошлом, ближайшая к текущей, то вместо MIN(data), надо ставить MAX(data).
Код: SQL
1.
2.
3.
SELECT MAX(data) AS nearest_date
FROM таблица
WHERE id <> 1;
Если даты могут быть больше текущей (т.е. уходить в будущее), то можно так:
Код: SQL
1.
2.
3.
4.
5.
SELECT data AS nearest_date
FROM таблица
WHERE ABS(CURRENT_DATE - data) = (SELECT MIN(ABS(CURRENT_DATE - data))
                FROM таблица
                WHERE id <> 1);
P.S. И не называйте колонку с датой "data", это переводится как "данные". Лучше назовите "date".
...
Рейтинг: 0 / 0
Спаситеее
    #1665356
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Людмила  15.02.2026, 22:55:47
[игнорируется]
defecator [игнорируется] 

Ближайшая дата по условию будет 01.15.26 т.к. 14.01 имеется Id=1, f по условию Id<>1 (ну и кто из нас пизда, можешь не отвечать)
походу Дефекатор про ипался.....
а задачка то с подвохом :)))
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1665358
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  15.02.2026, 23:40:24
[игнорируется]
Что всё-таки понимается под "ближайшей датой"?
Согласно вашему условию, MIN(датой) для всех записей с Id <> 1 является 01.14.26, а не 01.15.26.
у ИД =1 две даты : 01.12.26 и 01.14.26
из остальных ИД надо найти бОльшую дату , чем 01.14.26 ( у них ид=1)

т.е. ответом должно быть ид=7, дате= 01.15.26
...
и твари бобро
Изменено: 16.02.2026, 00:00:57 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1665367
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  15.02.2026, 23:57:33
[игнорируется]
Кусь  15.02.2026, 23:40:24
[игнорируется]
Что всё-таки понимается под "ближайшей датой"?
Согласно вашему условию, MIN(датой) для всех записей с Id <> 1 является 01.14.26, а не 01.15.26.
у ИД =1 две даты : 01.12.26 и 01.14.26
из остальных ИД надо найти бОльшую дату к 01.14.26
Условие коряво написано, но погадаем ещё. Возможно, если дата уже однажды засветилась с Id=1, её надо отбросить и брать другую ближайшую (минимальную дату), у которой ещё не было Id = 1.

Тогда можно так:
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as (
select 1 as id, to_date('Jan 12, 2026', 'Mon DD, YYYY') as data
union all
select 1 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 2 as id, to_date('Jan 18, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 15, 2026', 'Mon DD, YYYY')
)
select MIN(data) as nearest_date from t
where data not in (select data from t where id = 1);
изображение_2026-02-15_221333629.png
...
Изменено: 16.02.2026, 00:14:30 - Кусь
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1665368
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 00:13:58
[игнорируется]
Гарын  15.02.2026, 23:57:33
[игнорируется]
Кусь  15.02.2026, 23:40:24
[игнорируется]
Что всё-таки понимается под "ближайшей датой"?
Согласно вашему условию, MIN(датой) для всех записей с Id <> 1 является 01.14.26, а не 01.15.26.
у ИД =1 две даты : 01.12.26 и 01.14.26
из остальных ИД надо найти бОльшую дату к 01.14.26
Условие коряво написано, но погадаем ещё. Возможно, если дата уже однажды засветилась с Id=1, её надо отбросить и брать другую ближайшую (минимальную дату), у которой ещё не было Id = 1.

Тогда можно так:
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as (
select 1 as id, to_date('Jan 12, 2026', 'Mon DD, YYYY') as data
union all
select 1 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 2 as id, to_date('Jan 18, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 15, 2026', 'Mon DD, YYYY')
)
select MIN(data) as nearest_date from t
where data not in (select data from t where id = 1);
изображение_2026-02-15_221333629.png
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще? ( если строк будет не 5 а 100500 )
...
и твари бобро
Изменено: 16.02.2026, 00:18:42 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1665369
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мы с Гарынычем всё решим, всем поможем!
Не то что некоторые. [:grin]
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1665371
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  16.02.2026, 00:17:25
[игнорируется]
Кусь  16.02.2026, 00:13:58
[игнорируется]
Гарын  15.02.2026, 23:57:33
[игнорируется]
Кусь  15.02.2026, 23:40:24
[игнорируется]
Что всё-таки понимается под "ближайшей датой"?
Согласно вашему условию, MIN(датой) для всех записей с Id <> 1 является 01.14.26, а не 01.15.26.
у ИД =1 две даты : 01.12.26 и 01.14.26
из остальных ИД надо найти бОльшую дату к 01.14.26
Условие коряво написано, но погадаем ещё. Возможно, если дата уже однажды засветилась с Id=1, её надо отбросить и брать другую ближайшую (минимальную дату), у которой ещё не было Id = 1.

Тогда можно так:
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as (
select 1 as id, to_date('Jan 12, 2026', 'Mon DD, YYYY') as data
union all
select 1 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 2 as id, to_date('Jan 18, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 15, 2026', 'Mon DD, YYYY')
)
select MIN(data) as nearest_date from t
where data not in (select data from t where id = 1);
изображение_2026-02-15_221333629.png
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще?
Сам запрос-то - две последние строчки. Чтобы не создавать таблицу, я просто написал табличные данные через WITH.
...
Рейтинг: 0 / 0
Спаситеее
    #1665372
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 00:18:16
[игнорируется]
Мы с Гарынычем всё решим, всем поможем!
Не то что некоторые. [:grin]
Гарын  16.02.2026, 00:17:25
[игнорируется]
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще? ( если строк будет не 5 а 100500 )
...
и твари бобро
Изменено: 16.02.2026, 00:20:46 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1665373
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  16.02.2026, 00:17:25
[игнорируется]
Кусь  16.02.2026, 00:13:58
[игнорируется]
Гарын  15.02.2026, 23:57:33
[игнорируется]
Кусь  15.02.2026, 23:40:24
[игнорируется]
...
у ИД =1 две даты : 01.12.26 и 01.14.26
из остальных ИД надо найти бОльшую дату к 01.14.26
Условие коряво написано, но погадаем ещё. Возможно, если дата уже однажды засветилась с Id=1, её надо отбросить и брать другую ближайшую (минимальную дату), у которой ещё не было Id = 1.

Тогда можно так:
Код: SQL
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
with t as (
select 1 as id, to_date('Jan 12, 2026', 'Mon DD, YYYY') as data
union all
select 1 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 14, 2026', 'Mon DD, YYYY')
union all
select 2 as id, to_date('Jan 18, 2026', 'Mon DD, YYYY')
union all
select 7 as id, to_date('Jan 15, 2026', 'Mon DD, YYYY')
)
select MIN(data) as nearest_date from t
where data not in (select data from t where id = 1);
изображение_2026-02-15_221333629.png
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще?
Сам запрос-то - две последние строчки. Чтобы не создавать таблицу, я просто переписал исходные данные через WITH.
...
Рейтинг: 0 / 0
Спаситеее
    #1665374
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  16.02.2026, 00:20:09
[игнорируется]
Кусь  16.02.2026, 00:18:16
[игнорируется]
Мы с Гарынычем всё решим, всем поможем!
Не то что некоторые. [:grin]
Гарын  16.02.2026, 00:17:25
[игнорируется]
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще? ( если строк будет не 5 а 100500 )
В самом запросе ничего не поменяется.
...
Рейтинг: 0 / 0
Спаситеее
    #1665376
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 00:22:24
[игнорируется]
Гарын  16.02.2026, 00:20:09
[игнорируется]
Кусь  16.02.2026, 00:18:16
[игнорируется]
Мы с Гарынычем всё решим, всем поможем!
Не то что некоторые. [:grin]
Гарын  16.02.2026, 00:17:25
[игнорируется]
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще? ( если строк будет не 5 а 100500 )
В самом запросе ничего не поменяется.
а можно как-то без УНИОНОВ ?
типа : найти ИД и Дату - у которых дата чуть больше , чем максимальная дата у ИД с номером 1 :)))
( давно я не брал в руки шашки :))) )
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1665377
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  16.02.2026, 00:25:32
[игнорируется]
Кусь  16.02.2026, 00:22:24
[игнорируется]
Гарын  16.02.2026, 00:20:09
[игнорируется]
Кусь  16.02.2026, 00:18:16
[игнорируется]
Мы с Гарынычем всё решим, всем поможем!
Не то что некоторые. [:grin]
Гарын  16.02.2026, 00:17:25
[игнорируется]
да, ты прошёл ТЕСТ :))), но какой-то сложный запрос у тебя получился :) в итоге,
а можно попроще? ( если строк будет не 5 а 100500 )
В самом запросе ничего не поменяется.
а можно как-то без УНИОНОВ ?
типа : найти ИД и Дату - у которых дата чуть больше , чем максимальная дата у ИД с номером 1 :)))
( давно я не брал в руки шашки :))) )
Говно вопрос, бро:
Код: SQL
1.
2.
select MIN(data) as nearest_date from t
where data > (select MAX(data) from t where id = 1);
P.S. Но зачем там были union all, ты, похоже, не понял. Но это не страшно. :)))
...
Рейтинг: 0 / 0
Спаситеее
    #1665381
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 00:30:20
[игнорируется]
Гарын  16.02.2026, 00:25:32
[игнорируется]
Кусь  16.02.2026, 00:22:24
[игнорируется]
Гарын  16.02.2026, 00:20:09
[игнорируется]
Кусь  16.02.2026, 00:18:16
[игнорируется]
...
Гарын  16.02.2026, 00:17:25
[игнорируется]
...
В самом запросе ничего не поменяется.
а можно как-то без УНИОНОВ ?
типа : найти ИД и Дату - у которых дата чуть больше , чем максимальная дата у ИД с номером 1 :)))
( давно я не брал в руки шашки :))) )
Говно вопрос, бро:
Код: SQL
1.
2.
select MIN(data) as nearest_date from t
where data > (select MAX(data) from t where id = 1);
P.S. Но зачем там были union all, ты, похоже, не понял. Но это не страшно. :)))
о, то что надо !!! уложились в 2 строки :)
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1665382
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 00:30:20
[игнорируется]
P.S. Но зачем там были union all, ты, похоже, не понял. Но это не страшно. :)))
да
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1665387
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  16.02.2026, 00:36:22
[игнорируется]
Кусь  16.02.2026, 00:30:20
[игнорируется]
Гарын  16.02.2026, 00:25:32
[игнорируется]
Кусь  16.02.2026, 00:22:24
[игнорируется]
Гарын  16.02.2026, 00:20:09
[игнорируется]
...
В самом запросе ничего не поменяется.
а можно как-то без УНИОНОВ ?
типа : найти ИД и Дату - у которых дата чуть больше , чем максимальная дата у ИД с номером 1 :)))
( давно я не брал в руки шашки :))) )
Говно вопрос, бро:
Код: SQL
1.
2.
select MIN(data) as nearest_date from t
where data > (select MAX(data) from t where id = 1);
P.S. Но зачем там были union all, ты, похоже, не понял. Но это не страшно. :)))
о, то что надо !!! уложились в 2 строки :)
Можно в три строки, тогда получим ещё и айдишник:
Код: SQL
1.
2.
3.
select id, data from t
where data > (select MAX(data) from t where id = 1)
order by data limit 1;
изображение_2026-02-15_224156770.png
...
Изменено: 16.02.2026, 00:41:59 - Кусь
Рейтинг: 0 / 0
Спаситеее
    #1665388
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 00:41:27
[игнорируется]
Гарын  16.02.2026, 00:36:22
[игнорируется]
Кусь  16.02.2026, 00:30:20
[игнорируется]
Гарын  16.02.2026, 00:25:32
[игнорируется]
Кусь  16.02.2026, 00:22:24
[игнорируется]
...
а можно как-то без УНИОНОВ ?
типа : найти ИД и Дату - у которых дата чуть больше , чем максимальная дата у ИД с номером 1 :)))
( давно я не брал в руки шашки :))) )
Говно вопрос, бро:
Код: SQL
1.
2.
select MIN(data) as nearest_date from t
where data > (select MAX(data) from t where id = 1);
P.S. Но зачем там были union all, ты, похоже, не понял. Но это не страшно. :)))
о, то что надо !!! уложились в 2 строки :)
Можно в три строки, тогда получим ещё и айдишник:
Код: SQL
1.
2.
3.
select id, dat from t
where dat > (select MAX(dat) from t where id = 1)
order by dat ASC  limit 1;
о , то что мну хотел скозать словами!!! супер!
Кусю - двойную порцию пирожков домашних от Людмилы!

зы:
Цитата 
[игнорируется]
Запрос SQL «ORDER BY дата LIMIT 1» — это конструкция, которая позволяет упорядочить строки по дате (или другому столбцу) в обратном порядке (параметр DESC) и ограничить число строк в результатах (параметр LIMIT 1).
bipp.io
sky.pro
sky.pro
ORDER BY упорядочивает строки по указанному столбцу, по умолчанию сортировка выполняется по возрастанию (ASC). Можно сортировать по нескольким столбцам, по алиасам или вычисляемым выражениям.
mousedc.ru
skillbox.ru
LIMIT ограничивает число строк в результатах, в данном случае выводят только одну, самую последнюю запись.
sky.pro
Важно: ORDER BY не изменяет порядок хранения данных в таблице, он сортирует только результат запроса.
skillbox.ru
поправочка, мана ( ASC )
...
и твари бобро
Изменено: 16.02.2026, 00:52:56 - Гарын
Рейтинг: 1 / 0
Нравится: Кусь
Спаситеее
    #1665391
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь [игнорируется] 

Кусь, а ASC там нада или лишнее?
Код: SQL
1.
2.
3.
select id, dat from t
where dat > (select MAX(dat) from t where id = 1)
order by dat ASC  limit 1;
( видимо лишнее, потму-что ASC по умолчанию...., да?
но с ASC понятней и читабельней ( имхо), ведь умолчание могёт и поменяться.... :))) )

)
...
и твари бобро
Изменено: 16.02.2026, 01:00:05 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1665396
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын  16.02.2026, 00:56:46
[игнорируется]
Кусь [игнорируется] 

Кусь, а ASC там нада или лишнее?
Код: SQL
1.
2.
3.
select id, dat from t
where dat > (select MAX(dat) from t where id = 1)
order by dat ASC  limit 1;
( видимо лишнее, потму-что ASC по умолчанию...., да?
но с ASC понятней и читабельней ( имхо), ведь умолчание могёт и поменяться.... :))) )

)
[:facepalm]

Пора, наверное, спать. Всем доброй ночи. [:smile]
...
Рейтинг: 0 / 0
Спаситеее
    #1665398
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 01:01:23
[игнорируется]
Гарын  16.02.2026, 00:56:46
[игнорируется]
Кусь [игнорируется] 

Кусь, а ASC там нада или лишнее?
Код: SQL
1.
2.
3.
select id, dat from t
where dat > (select MAX(dat) from t where id = 1)
order by dat ASC  limit 1;
( видимо лишнее, потму-что ASC по умолчанию...., да?
но с ASC понятней и читабельней ( имхо), ведь умолчание могёт и поменяться.... :))) )

)
[:facepalm]

Пора, наверное, спать. Всем доброй ночи. [:smile]
я фигню спорол? сорри тогда

зы : завтра порешаем с двумя параметрами ? :)))
@ИД_покупателя и @дата_покупки :)))
...
и твари бобро
Изменено: 16.02.2026, 01:05:43 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1665493
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ребят, не ожидала! Большое Спасибо!
Ща раскидаю дела, засяду разбираться.
Отпишусь.
...
Рейтинг: 0 / 0
Спаситеее
    #1665496
Фотография Green
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из входных данных надо убрать id=1, а потом из полученной таблицы найти минимум.
Может вложенным сделать, первым запросом убрать id=1, а вторым запросом найти минимум даты.
...
Изменено: 16.02.2026, 09:19:34 - Green
Рейтинг: 0 / 0
Спаситеее
    #1665563
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И снова здравствуйте!
Разобрала совет от Горыныча (показался самым элегантным!). Подшаманила под FoxPro, получилось:

select Top 1 id, dat from t where dat > (select MAX(dat) from t where id = 1) order by dat

Всё получилось как хотели !!!
Ребят, Большое спасибо!
...
Рейтинг: 0 / 0
Спаситеее
    #1665568
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 10:19:27
[игнорируется]
И снова здравствуйте!
Разобрала совет от Горыныча (показался самым элегантным!). Подшаманила под FoxPro, получилось:

select Top 1 id, dat from t where dat > (select MAX(dat) from t where id = 1) order by dat

Всё получилось как хотели !!!
Ребят, Большое спасибо!
Гарыныч - голова! Не то что некоторые. :)))
...
Рейтинг: 0 / 0
Спаситеее
    #1665570
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green  16.02.2026, 09:19:20
[игнорируется]
Из входных данных надо убрать id=1, а потом из полученной таблицы найти минимум.
Может вложенным сделать, первым запросом убрать id=1, а вторым запросом найти минимум даты.
Прежде всего надо обратить саентолога в лютеранство. Первым же запросом !
Потом всё остальное.
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1665831
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Кусь  16.02.2026, 10:24:31
[игнорируется]
Green  16.02.2026, 09:19:20
[игнорируется]
Из входных данных надо убрать id=1, а потом из полученной таблицы найти минимум.
Может вложенным сделать, первым запросом убрать id=1, а вторым запросом найти минимум даты.
Прежде всего надо обратить саентолога в лютеранство. Первым же запросом !
Потом всё остальное.
:)))
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1665867
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 10:19:27
[игнорируется]
И снова здравствуйте!
Разобрала совет от Горыныча (показался самым элегантным!). Подшаманила под FoxPro, получилось:

select Top 1 id, dat from t where dat > (select MAX(dat) from t where id = 1) order by dat

Всё получилось как хотели !!!
Ребят, Большое спасибо!
это просто подгон под условие "хочу вытащить конкретную дату", а не решение

В задаче чётко написано:
Цитата 
[игнорируется]
получить ближайшую MIN(дату) из имеющихся, где нет Id = 1
при этом указано, какую дату получить
Цитата 
[игнорируется]
т.е. 01.15.26
И нахуя тогда все эти сложности, если можно было просто написать
Код: SQL
1.
SELECT * where data = {^01.15.26}
А вот если соблюдать конкретное условие:
Цитата 
[игнорируется]
получить ближайшую MIN(дату) из имеющихся, где нет Id = 1
то ближайшая MIN(дата), где нет id = 1, будет как раз "01.14.26", а вовсе не 01.15.26

Так что задача или поставлена изначально некорректно, или ТС додумала сама, что минимальная дата 01.15.26, а не 01.14.26
Спойлер
Людмила  15.02.2026, 15:15:55
[игнорируется]
Есть таблица.dbf

id | data
------------------
1 | 01.12.26
1 | 01.14.26
7 | 01.14.26
2 | 01.18.26
7 | 01.15.26

нужно запросом SELECT ....... where Id <> 1 and data > {^2026.01.12} получить ближайшую MIN(дату) из имеющихся, где нет Id = 1, т.е. 01.15.26
...
Изменено: 16.02.2026, 13:48:24 - defecator
Рейтинг: 0 / 0
Спаситеее
    #1665909
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
но, пришел програмист, обзывая меня объяснил,.что для id = 1 and datr = {^2026.01.12} (первая строчка),
запрос должен выдать следующую дату из таблицы, где на эту дату нет id=1 where id <> 1 and datr > {^2026.01.12},
в данном случае - 01.16.26 (четвертая строчка)

id | datr
------------------
1 | 01.12.26
7 | 01.14.26
1 | 01.14.26
2 | 01.16.26
7 | 01.17.26

наши Selectы выдают вторую строчку, хоть тресни!
...
Рейтинг: 0 / 0
Спаситеее
    #1665927
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 14:31:11
[игнорируется]
но, пришел програмист, обзывая меня объяснил,.что для id = 1 and datr = {^2026.01.12} (первая строчка),
запрос должен выдать следующую дату из таблицы, где на эту дату нет id=1 where id <> 1 and datr > {^2026.01.12},
в данном случае - 01.16.26 (четвертая строчка)

id | datr
------------------
1 | 01.12.26
7 | 01.14.26
1 | 01.14.26
2 | 01.16.26
7 | 01.17.26

наши Selectы выдают вторую строчку, хоть тресни!
и правильно выдают !
Потому что там в SELECT используется MIN - выборка минимальной даты из таблицы

А минимальная дата в этой таблице - 01.14.26 (вторая строка)
...
Рейтинг: 0 / 0
Спаситеее
    #1665943
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Короче, или ТС тупая, или условие - говно
Screenshot_912.png
...
Рейтинг: 0 / 0
Спаситеее
    #1665952
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator [игнорируется] 

Ну вот, а нужно на 16.01.26 выйти, потому как на дату 14.01.26 имеется Id = 1
...
Рейтинг: 0 / 0
Спаситеее
    #1665960
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 14:56:26
[игнорируется]
defecator [игнорируется] 

Ну вот, а нужно на 16.01.26 выйти, потому как на дату 14.01.26 имеется Id = 1
там одна и та же дата два раза, с разными ID

Если мы уберём ID = 1, то всё равно останется дата с ID = 7
Screenshot_913.png
Тогда надо убирать ещё и ID = 7, тогда условие выполнится
Screenshot_914.png
...
Рейтинг: 0 / 0
Спаситеее
    #1665978
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator [игнорируется] 

Datr - даты приема врача
Id - группа пациентов

Допустим сегодня 12.01, врач должен записать эту группу на следующую ближайшую дату приема из таблицы, где эта группа на записана. т.е 16.01 (из примера)
...
Рейтинг: 0 / 0
Спаситеее
    #1665986
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 15:18:13
[игнорируется]
defecator [игнорируется] 

Datr - даты приема врача
Id - группа пациентов

Допустим сегодня 12.01, врач должен записать эту группу на следующую ближайшую дату приема из таблицы, где эта группа на записана. т.е 16.01 (из примера)
это так не работает, как ты хочешь.
У тебя в таблице, после того, как сработает условие ID <> 1, всё равно остаётся минимальная дата - 14.01.26

Вот смотри, что останется, если убрать ID <> 1
Screenshot_915.png
Из этого набора у тебя останется три даты, минимальная из которых - всё равно 14.01.26
агрегат MIN вытащит именно эту дату

Возможно, что тебе не хватает каких-то дополнительных условий,
например, нужно в условии использовать ещё и ID (группа пациентов)


В противном случае, без доп.условий, задача вытащить минимальную дату 16.01.2026 вместо 14.01.2026 - не решается от слова совсем
...
Изменено: 16.02.2026, 15:27:57 - defecator
Рейтинг: 0 / 0
Спаситеее
    #1666044
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Надо поработать над условием задачу. Можно спросить вашего старшего программиста, может он поможет описать, что там всё-таки надо.
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1666085
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Семён Семёныч !

id | datr
------------------
1 | 01.12.26
7 | 01.14.26
1 | 01.14.26
2 | 01.16.26
7 | 01.17.26

SELECT MIN(Datr) FROM tt WHERE datr>{^2026.01.12} AND Datr NOT in (SELECT Datr FROM tt WHERE Id=1 AND datr>{^2026.01.12})

Выбирает - 16.01 - четвертую строку.

Всем, Всем, Всем, большое Спасибочки.
[:smile] если что, обращайтесь, буду рада помочь.
...
Рейтинг: 0 / 0
Спаситеее
    #1666090
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Людмила  16.02.2026, 17:13:33
[игнорируется]
Семён Семёныч !

id | datr
------------------
1 | 01.12.26
7 | 01.14.26
1 | 01.14.26
2 | 01.16.26
7 | 01.17.26

SELECT MIN(Datr) FROM tt WHERE datr>{^2026.01.12} AND Datr NOT in (SELECT Datr FROM tt WHERE Id=1 AND datr>{^2026.01.12})

Выбирает - 16.01 - четвертую строку.

Всем, Всем, Всем, большое Спасибочки.
[:smile] если что, обращайтесь, буду рада помочь.
ну наконец то :))), рад за вас!

зы: тут как обычно, обращаются к даме с просьбой : фотку на фоне 8 пальцев :)
...
и твари бобро
Изменено: 16.02.2026, 17:19:25 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1666092
defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 17:13:33
[игнорируется]
Семён Семёныч !

id | datr
------------------
1 | 01.12.26
7 | 01.14.26
1 | 01.14.26
2 | 01.16.26
7 | 01.17.26

SELECT MIN(Datr) FROM tt WHERE datr>{^2026.01.12} AND Datr NOT in (SELECT Datr FROM tt WHERE Id=1 AND datr>{^2026.01.12})

Выбирает - 16.01 - четвертую строку.

Всем, Всем, Всем, большое Спасибочки.
[:smile] если что, обращайтесь, буду рада помочь.
это просто подгонка решения под желаемый ответ, это не решение
...
Рейтинг: 0 / 0
Спаситеее
    #1666107
Фотография Green
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 15:18:13
[игнорируется]
defecator [игнорируется] 

Datr - даты приема врача
Id - группа пациентов

Допустим сегодня 12.01, врач должен записать эту группу на следующую ближайшую дату приема из таблицы, где эта группа на записана. т.е 16.01 (из примера)
А как так получается, что в таблице даты приема совпадают для разных групп пациентов, надо тогда очистить совпадающие даты.
...
Рейтинг: 0 / 0
Спаситеее
    #1666115
Фотография Green
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 17:13:33
[игнорируется]
Семён Семёныч !

id | datr
------------------
1 | 01.12.26
7 | 01.14.26
1 | 01.14.26
2 | 01.16.26
7 | 01.17.26

SELECT MIN(Datr) FROM tt WHERE datr>{^2026.01.12} AND Datr NOT in (SELECT Datr FROM tt WHERE Id=1 AND datr>{^2026.01.12})

Выбирает - 16.01 - четвертую строку.

Всем, Всем, Всем, большое Спасибочки.
[:smile] если что, обращайтесь, буду рада помочь.
Вот тут Людмила вложенным запросом очистила входные данные от совпадающих дат и получила решение.

Можно то же самое сделать через left jotn и выбрать только те записи, где правая сторона Null.
...
Рейтинг: 0 / 0
Спаситеее
    #1666140
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
defecator [игнорируется]  : "это просто подгонка решения под желаемый ответ, это не решение" ?!?

протестила на таблице в более 1000 строк.

Всё ОК!
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1666188
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Green  16.02.2026, 17:33:57
[игнорируется]
Людмила  16.02.2026, 15:18:13
[игнорируется]
defecator [игнорируется] 

Datr - даты приема врача
Id - группа пациентов

Допустим сегодня 12.01, врач должен записать эту группу на следующую ближайшую дату приема из таблицы, где эта группа на записана. т.е 16.01 (из примера)
А как так получается, что в таблице даты приема совпадают для разных групп пациентов, надо тогда очистить совпадающие даты.
группы пациентов могут быть разные, мана
например : группа ид=1 - это льготники/пенсионеры ( например )
остальные группы - это другие
( имхо)

ну и : на фокспро я прогал крайний раз лет 30 назад :)
...
и твари бобро
Изменено: 16.02.2026, 18:13:15 - Гарын
Рейтинг: 0 / 0
Спаситеее
    #1666328
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гарын [игнорируется] 

Описание и всё остальное всего лишь малая часть реальной задачи, у групп имеются подгруппы, коды врачей ..., их даты приема.
Запрос естественно разросся вдвое.

А от FoxPro тут только table.DBF, запрос простенький на SQL,
а прога сама крутится на Golang. Вот такой винегрет.
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1666345
Гарын
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
3-й статус
Людмила  16.02.2026, 21:32:04
[игнорируется]
Гарын [игнорируется] 

Описание и всё остальное всего лишь малая часть реальной задачи, у групп имеются подгруппы, коды врачей ..., их даты приема.
Запрос естественно разросся вдвое.

А от FoxPro тут только table.DBF, запрос простенький на SQL,
а прога сама крутится на Golang. Вот такой винегрет.
понял
...
и твари бобро
Рейтинг: 0 / 0
Спаситеее
    #1666365
Фотография Green
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Людмила  16.02.2026, 21:32:04
[игнорируется]
Гарын [игнорируется] 

Описание и всё остальное всего лишь малая часть реальной задачи, у групп имеются подгруппы, коды врачей ..., их даты приема.
Запрос естественно разросся вдвое.

А от FoxPro тут только table.DBF, запрос простенький на SQL,
а прога сама крутится на Golang. Вот такой винегрет.
По современной моде такие базы делают на sqlite
...
Рейтинг: 0 / 0
Спаситеее
    #1666367
Кусь
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Green  16.02.2026, 22:47:56
[игнорируется]
Людмила  16.02.2026, 21:32:04
[игнорируется]
Гарын [игнорируется] 

Описание и всё остальное всего лишь малая часть реальной задачи, у групп имеются подгруппы, коды врачей ..., их даты приема.
Запрос естественно разросся вдвое.

А от FoxPro тут только table.DBF, запрос простенький на SQL,
а прога сама крутится на Golang. Вот такой винегрет.
По современной моде такие базы делают на sqlite
И устанавливают всё это на Raspberry Pi. По заветам одного саентолога. [:zsmoke]
...
Рейтинг: 1 / 0
Нравится: Гарын
Спаситеее
    #1666718
Людмила
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Безе FoxPro уже 20+ лет и прога ее шебуршала на Фоксе написанная (всё летало).
Затем прогу переписали на Delphi, ну и затем на Go.
Последние, как оказалось, по производительности (незначительно но) уступали и уступают старому-доброму FoxPro.
...
Рейтинг: 1 / 0
Нравится: Гарын
51 сообщений из 51, показаны все 3 страниц
Форумы / SQL [закрыт для гостей] / Спаситеее
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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