Здравствуйте, 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>
Здравствуйте, syteser, Вы писали:
S>Помогите составить запрос который вернет набор данных с уникальным Именем, минимальным Балом и Датой когда получен этот Бал.
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, syteser, Вы писали:
S>>Помогите составить запрос который вернет набор данных с уникальным Именем, минимальным Балом и Датой когда получен этот Бал.
W>Таких дат может быть несколько, вообще-то.
согласен... Последней датой при которой был минимальный бал
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, syteser, Вы писали:
W>Тогда получается три этапа: W>1) получение минимального балла (простой group by) W>2) выбор нужной даты с этим баллом W>3) итоговый результат
W>Соответственно, три вложенных запроса.
Спасибо. Значит думаю в правильном направлении. Пока что каша в голове. Много чего прочел по SQL, жду пока уляжется
Здравствуйте, syteser, Вы писали:
S>Спасибо. Значит думаю в правильном направлении. Пока что каша в голове. Много чего прочел по SQL, жду пока уляжется
Про оконные функции (partition, over и т.п.) пока не читай, что бы не путаться, это следующий курс.
Здравствуйте, 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
Здравствуйте, wildwind, Вы писали:
W>Здравствуйте, syteser, Вы писали:
S>>Спасибо. Значит думаю в правильном направлении. Пока что каша в голове. Много чего прочел по SQL, жду пока уляжется
W>Про оконные функции (partition, over и т.п.) пока не читай, что бы не путаться, это следующий курс.
Я начал про OVER и понял что не понимаю абсолютно ничего
Здравствуйте, cppguard, Вы писали:
C>Здравствуйте, syteser, Вы писали:
C> for row in cursor.execute('SELECT name, max(date), score FROM students WHERE score < 4 GROUP BY name'):
Здравствуйте, Alex.Che, Вы писали:
AC>Здравствуйте, syteser, Вы писали:
AC>>>никому не говори версию FB — пускай все угадывают.
S>>Прошу прощения. FB 2.5
AC>в 2.5 оконные функции отсутствуют. AC>так что никаких over partition. AC>делай подзапросами.
В процессе разбирательсва и общения запрос опять поменялся ). Немного сам подумаю и отпишусь. Спасибо всем за помощь!
раз нет аналитических функций 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
Здравствуйте, 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
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>