Re[8]: минимальное значение уникальных данных
От: syteser  
Дата: 08.06.22 11:02
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Здравствуйте, syteser, Вы писали:


vsb>>>Здравствуйте, syteser, Вы писали:


S>>>>SELECT name, MIN(ball) AS minball FROM mybase GROUP BY name ORDER BY minball DESC


S>>>>Не удается добавит поле date...


vsb>>>Тебе нужно использовать под-запрос.


S>>Я тоже так понял. Разбираюсь. Спасибо


vsb>Есть ещё не получилось, то примерно так будет максимально просто:


vsb>
vsb>select b1.name,
vsb>       b1.ball,
vsb>       (select b2.date
vsb>        from mybase b2
vsb>        where b2.name = b1.name
vsb>          and b2.ball = b1.ball
vsb>        order by b2.date
vsb>        limit 1)
vsb>from (select name,
vsb>             min(ball) ball
vsb>      from mybase
vsb>      group by name
vsb>      order by name) b1
vsb>


Спасибо. Буду пробовать!
Re: минимальное значение уникальных данных
От: wildwind Россия  
Дата: 08.06.22 11:17
Оценка:
Здравствуйте, syteser, Вы писали:

S>Помогите составить запрос который вернет набор данных с уникальным Именем, минимальным Балом и Датой когда получен этот Бал.


Таких дат может быть несколько, вообще-то.
Re[2]: минимальное значение уникальных данных
От: syteser  
Дата: 08.06.22 11:18
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, syteser, Вы писали:


S>>Помогите составить запрос который вернет набор данных с уникальным Именем, минимальным Балом и Датой когда получен этот Бал.


W>Таких дат может быть несколько, вообще-то.


согласен... Последней датой при которой был минимальный бал

Спасибо за поправку! Я сам уже запутался.

Последней датой, когда бал был ниже Х.
Отредактировано 08.06.2022 11:26 syteser . Предыдущая версия .
Re[3]: минимальное значение уникальных данных
От: wildwind Россия  
Дата: 08.06.22 11:30
Оценка:
Здравствуйте, syteser, Вы писали:

Тогда получается три этапа:
1) получение минимального балла (простой group by)
2) выбор нужной даты с этим баллом
3) итоговый результат

Соответственно, три вложенных запроса.
Re[4]: минимальное значение уникальных данных
От: syteser  
Дата: 08.06.22 11:43
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, syteser, Вы писали:


W>Тогда получается три этапа:

W>1) получение минимального балла (простой group by)
W>2) выбор нужной даты с этим баллом
W>3) итоговый результат

W>Соответственно, три вложенных запроса.


Спасибо. Значит думаю в правильном направлении. Пока что каша в голове. Много чего прочел по SQL, жду пока уляжется
Re[5]: минимальное значение уникальных данных
От: wildwind Россия  
Дата: 08.06.22 12:01
Оценка:
Здравствуйте, syteser, Вы писали:

S>Спасибо. Значит думаю в правильном направлении. Пока что каша в голове. Много чего прочел по SQL, жду пока уляжется


Про оконные функции (partition, over и т.п.) пока не читай, что бы не путаться, это следующий курс.
Re: минимальное значение уникальных данных
От: cppguard  
Дата: 08.06.22 12:30
Оценка:
Здравствуйте, syteser, Вы писали:

S>Добрый день.


S>Помогите со следующей задачей.


S>СУБД — FB 2,5


S>Есть таблица с полями Имя, Дата, Балл

S>Вида

S>Сидоров 22.05.2022 5

S>Иванов 01.01.2022 5
S>Петров 02.03.2022 3
S>Иванов 02.05.2022 2
S>Иванов 12.03.2022 5
S>Сидоров 03.04.2022 1

S>Помогите составить запрос который вернет набор данных с уникальным Именем, Балом и последней Датой когда Бал был меньше Х.

S>То есть, при Х = 4:

S>Петров 02.03.2022 3

S>Иванов 02.05.2022 2
S>Сидоров 03.04.2022 1

select name, max(date) where score < 5 group by name


from contextlib import closing
import sqlite3


with closing(sqlite3.connect(":memory:")) as connection:
    cursor = connection.cursor()
    cursor.execute('CREATE TABLE students (name text, date text, score integer)')
    cursor.execute("INSERT INTO students VALUES ('Sid', '2022-05-22', 5)")
    cursor.execute("INSERT INTO students VALUES ('Ivan', '2022-01-01', 5)")
    cursor.execute("INSERT INTO students VALUES ('Pete', '2022-03-02', 3)")
    cursor.execute("INSERT INTO students VALUES ('Ivan', '2022-05-02', 2)")
    cursor.execute("INSERT INTO students VALUES ('Ivan', '2022-03-12', 5)")
    cursor.execute("INSERT INTO students VALUES ('Sid', '2022-04-03', 1)")
    connection.commit()

    for row in cursor.execute('SELECT name, max(date), score FROM students WHERE score < 4 GROUP BY name'):
        print row


$ python test.py 
(u'Ivan', u'2022-05-02', 2)
(u'Pete', u'2022-03-02', 3)
(u'Sid', u'2022-04-03', 1)
Re[6]: минимальное значение уникальных данных
От: syteser  
Дата: 08.06.22 12:40
Оценка:
Здравствуйте, wildwind, Вы писали:

W>Здравствуйте, syteser, Вы писали:


S>>Спасибо. Значит думаю в правильном направлении. Пока что каша в голове. Много чего прочел по SQL, жду пока уляжется


W>Про оконные функции (partition, over и т.п.) пока не читай, что бы не путаться, это следующий курс.


Я начал про OVER и понял что не понимаю абсолютно ничего
Re[2]: минимальное значение уникальных данных
От: syteser  
Дата: 08.06.22 12:41
Оценка:
Здравствуйте, cppguard, Вы писали:

C>Здравствуйте, syteser, Вы писали:


C> for row in cursor.execute('SELECT name, max(date), score FROM students WHERE score < 4 GROUP BY name'):


Спасибо. Буду пробовать!
Re[11]: минимальное значение уникальных данных
От: Alex.Che  
Дата: 08.06.22 14:46
Оценка:
Здравствуйте, syteser, Вы писали:

AC>>никому не говори версию FB — пускай все угадывают.


S>Прошу прощения. FB 2.5


в 2.5 оконные функции отсутствуют.
так что никаких over partition.
делай подзапросами.
Re[12]: минимальное значение уникальных данных
От: syteser  
Дата: 08.06.22 15:06
Оценка:
Здравствуйте, Alex.Che, Вы писали:

AC>Здравствуйте, syteser, Вы писали:


AC>>>никому не говори версию FB — пускай все угадывают.


S>>Прошу прощения. FB 2.5


AC>в 2.5 оконные функции отсутствуют.

AC>так что никаких over partition.
AC>делай подзапросами.

В процессе разбирательсва и общения запрос опять поменялся ). Немного сам подумаю и отпишусь. Спасибо всем за помощь!
Re[9]: минимальное значение уникальных данных
От: IZM  
Дата: 09.06.22 03:12
Оценка:
раз нет аналитических функций c partition by то:
В первом запросе убираем аналитическую функцию:
select  a.CName, a.nMinball, min(b.ddate) as DMinDate
from
(select cName,  min(nBall) as nMinBall
   from tb_test1
 group by cName
) a
 join tb_test1 b on (b.cName=a.cname and b.nBall=a.nminball)
group by  a.CName, a.nMinball


если Select From select не сможет (хотя FB с версия 2 должен такое уметь), то можно внутренний Select заменить на View
Re[10]: минимальное значение уникальных данных
От: syteser  
Дата: 09.06.22 10:44
Оценка:
Здравствуйте, IZM, Вы писали:

IZM>раз нет аналитических функций c partition by то:

IZM>В первом запросе убираем аналитическую функцию:
IZM>
IZM>select  a.CName, a.nMinball, min(b.ddate) as DMinDate
IZM>from
IZM>(select cName,  min(nBall) as nMinBall
IZM>   from tb_test1
IZM> group by cName
IZM>) a
IZM> join tb_test1 b on (b.cName=a.cname and b.nBall=a.nminball)
IZM>group by  a.CName, a.nMinball
IZM>


IZM>если Select From select не сможет (хотя FB с версия 2 должен такое уметь), то можно внутренний Select заменить на View


Спасибо Вам!
Сейчас буду пробовать
Re[10]: минимальное значение уникальных данных
От: syteser  
Дата: 09.06.22 10:59
Оценка:
Здравствуйте, IZM, Вы писали:

IZM>
IZM>select  a.CName, a.nMinball, min(b.ddate) as DMinDate
IZM>from
IZM>(select cName,  min(nBall) as nMinBall
IZM>   from tb_test1
IZM> group by cName
IZM>) a
IZM> join tb_test1 b on (b.cName=a.cname and b.nBall=a.nminball)
IZM>group by  a.CName, a.nMinball
IZM>


Идеально! Вы — гений!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.