:: Visual Foxpro, Foxpro for DOS
Помогите с SQL-запросом
ZenTigra

Сообщений: 514
Дата регистрации: 03.12.2004
Есть таблица, вот пример
    Kod Name
    1 Запись №1
    1 Запись №2
    1 Запись №3
    2 Запись №4
    3 Запись №5
    3 Запись №6
    4 Запись №7


Нужно выбрать по ОДНОЙ ПЕРВОЙ записи каждого кода, и чтоб этот запрос не тормозил.
Через группировку по полю Kod - я думаю будет не правильно, писать код SCAN...ENDSCAN так же не хочется.
Подскажите

Вот таким должен быть результат выборки
    Kod Name
    1 Запись №1
    2 Запись №4
    3 Запись №5
    4 Запись №7




Исправлено 2 раз(а). Последнее : ZenTigra, 18.11.19 09:25
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
() щас набросятся про "первую"
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
Аркадий

Сообщений: 252
Откуда: Санкт-Петербург
Дата регистрации: 30.11.2005
Что-то типа
select aa.kod, aa.name from таблица aa where aa.kod+aa.name in (select bb.kod+min(bb.name) from таблица bb where aa.kod=bb.kod)

Если name повторяется, то добавить GROUP BY aa.kod, aa.name
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
AndyNigmatec

Сообщений: 1552
Откуда: Волгоград
Дата регистрации: 28.06.2015
Конечно набросимся "первая" - это ж от сортировки зависит
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
PaulWist

Сообщений: 14601
Дата регистрации: 01.04.2004
CREATE CURSOR test (Kod in, Name c(20))
INSERT INTO test VALUES (1, 'Запись №1')
INSERT INTO test VALUES (1, 'Запись №1')
INSERT INTO test VALUES (1, 'Запись №1')
INSERT INTO test VALUES (2, 'Запись №4')
INSERT INTO test VALUES (3, 'Запись №5')
INSERT INTO test VALUES (3, 'Запись №6')
INSERT INTO test VALUES (4, 'Запись №7')
SELECT Kod, MIN(Name) as Name FROM test GROUP BY KOd


------------------
Есть многое на свете, друг Горацио...
Что и не снилось нашим мудрецам.
(В.Шекспир Гамлет)
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
В SQL нет "первых" и "последних" записей самих по себе. Они могут появится при явном указании порядка - например если будет существовать 3-е поле и по нему будет указано упорядочение. Эффективно в фоксе такого рода запрос не делается.
Если же не использовать SQL, то хватит банального индекса по полю kod с опцией UNIQUE - он сам отфильтрует "дубликаты". И, насколько я помню, при этом он как раз отдаёт приоритет первой записи в физическом порядке их следования в dbf файле.


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
of63

Сообщений: 25161
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
> отдаёт приоритет первой записи в физическом порядке их следования в dbf файле.
да
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
LUCIAN

Сообщений: 343
Откуда: Лида Беларусь
Дата регистрации: 25.03.2008
SELECT 0
CREATE CURSOR CTEST (KOD I,NAME C(10))
INSERT INTO CTEST VALUES (1, 'Запись №1')
INSERT INTO CTEST VALUES (1, 'Запись №2')
INSERT INTO CTEST VALUES (1, 'Запись №3')
INSERT INTO CTEST VALUES (2, 'Запись №4')
INSERT INTO CTEST VALUES (3, 'Запись №5')
INSERT INTO CTEST VALUES (3, 'Запись №5')
INSERT INTO CTEST VALUES (4, 'Запись №7')
SELECT CNOM.KOD,CNOM.NAME FROM ;
(SELECT CTEST.*,RECNO() NZ FROM CTEST) CNOM INNER JOIN ;
(SELECT KOD,MIN(NZ) MNZ FROM (SELECT *,RECNO() NZ FROM CTEST) CNOM GROUP BY KOD ) CMIN ;
ON CMIN.MNZ = CNOM.NZ
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
Igor Korolyov
Автор

Сообщений: 34580
Дата регистрации: 28.05.2002
Излишне сложно И явно не про "и чтоб этот запрос не тормозил".
Если нет никакого поля которое определяет порядок следования записей (ну т.е. в таблице реально всего 2 поля), то проще именно сгруппировать по коду и взять MAX(name), ну или MIN(name) - что вообще без разницы, т.к. когда нет логического порядка, то за "первую" вполне можно считать "первую попавшуюся", и запись первая/последняя по алфавиту ничем не хуже


------------------
WBR, Igor
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
PavlikPavlikovich

Сообщений: 170
Дата регистрации: 21.07.2010
Здравствуйте!
Что бы не создавать новую тему. Помогите с запросом пожалуйста.

Делаю вот так. Ругается на слишком сложное выражение sql.
UPDATE таблица1 SET поле1=DATETIME() WHERE datn IN (SELECT DISTINCT datn FROM таблица2) AND nakl IN (SELECT DISTINCT nakl FROM таблица2)

Мне нужно в таблице1 в поле1 вставить DATETIME() на основании накладной и даты из таблицы2. (Нумерация накладных повторяется. поэтому очень важна связка дата+номер накладной)
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
AngelOKES

Сообщений: 828
Дата регистрации: 08.02.2012
если таблица не очень большая, то я бы предложил бы пройтись по ней сканом и уже там проверять все условия, работать будет не быстро, но надёжно
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
Владимир Максимов

Сообщений: 14095
Откуда: Москва
Дата регистрации: 02.09.2000
Темы лучше создавать новые, поскольку Ваш вопрос не имеет никакого отношения к вопросу в заголовке темы

Сравнение номера и даты по отдельности означает "ИЛИ". Далеко не факт, что найденные номер и дата в одном документе будут. Т.е. сама логика уже нарушена. Можно как-то так

UPDATE таблица1 ;
SET поле1=DATETIME() ;
FROM таблица1 ;
where exists(select 'x' ;
from таблица2 ;
where таблица2.datn = таблица1.datn ;
and таблица2.nakl = таблица1.nakl ;
)

или так

UPDATE таблица1 ;
SET поле1=DATETIME() ;
FROM таблица1 ;
INNER JOIN таблица2 ON таблица2.datn = таблица1.datn ;
and таблица2.nakl = таблица1.nakl
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
Аспид

Сообщений: 3475
Откуда: Москва
Дата регистрации: 01.04.2005
Вопрос с темой ну ваще никак не связан.
И ... не каждый до него вообще дойдет)
PavlikPavlikovich
Мне нужно в таблице1 в поле1 вставить DATETIME() на основании накладной и даты из таблицы2. (Нумерация накладных повторяется. поэтому очень важна связка дата+номер накладной)

UPDATE таблица1
SET таблица1.поле1= DATETIME()
FROM таблица2
where таблица2.datn =таблица1.datn and таблица2.nakl =таблица1.nakl

Написано прямо здесь.
Потому сори если что)



Исправлено 1 раз(а). Последнее : Аспид, 17.09.21 13:36
Ratings: 0 negative/0 positive
Re: Помогите с SQL-запросом
PavlikPavlikovich

Сообщений: 170
Дата регистрации: 21.07.2010
Владимир Максимов
Темы лучше создавать новые, поскольку Ваш вопрос не имеет никакого отношения к вопросу в заголовке темы
Извиняюсь. Хотел как лучше. Думал новая тема это мусор. А то что тут запрос к SQL серверу, не увидел. Набирал в поиске "помогите с запросом"

Владимир Максимов
UPDATE таблица1 ;
SET поле1=DATETIME() ;
FROM таблица1 ;
INNER JOIN таблица2 ON таблица2.datn = таблица1.datn ;
and таблица2.nakl = таблица1.nakl

Спасибо. Вот это помогло.



Исправлено 7 раз(а). Последнее : PavlikPavlikovich, 17.09.21 16:30
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 38 akvvohinc  (Гостей: 37)

© 2000-2024 Fox Club 
Яндекс.Метрика