powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с хитрым SELECT
28 сообщений из 28, показаны все 2 страниц
Помогите пожалуйста с хитрым SELECT
    #38623373
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день уважаемые гуру.
Delphi+Firebird2.1+Win7Prof+IBExpert

Пыталась сама, но безуспешно, видимо, только средством SQL запроса этого не сделать.
У меня есть таблица из 30 фамилий сотрудников, каждый день несколько сотрудников (4-5 человек) получают деньги, но мне нужно видеть, сколько денег выдано и какому сотруднику на текущий момент времени и дату, когда последний раз выдавались деньги.
Сделала форму в Delphi простую совсем: datetimepicker1,Combobox1,Edit1.

Создала таблицу:
Код: sql
1.
2.
3.
4.
5.
ID      INTEGER
MYDATA  DATE
FIO     VARCHAR
MONEY   DECIMAL
STAMP   TIMESTAMP



Заполнила тестовыми данными, пыталась сделать выборку.
В запросе мне нужно вывести тех, кто получил сегодня, с этим проблем нет:
Код: sql
1.
SELECT * from MONEYOUT where MYDATA = '''+Datetimepicker1.Date+'''


Могу по отдельности вывести по каждому сотруднику последнюю дату получения (ищу по max(ID))
Код: sql
1.
SELECT max(ID),FIO,MONEY from MONEYOUT where FIO = '''+Combobox1.Text+'''



Реально ли получить общий запрос? Сейчас пытаюсь сделать через GROUP BY и HAVING, но в правильном ли направлении начала думать?
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623391
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody,

Ну что-то вот такое
Код: sql
1.
SELECT Fio, max(Mydata),sum(Money) from Moneout group by Fio
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623428
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyРеально ли получить общий запрос?да.
ilovesomebody
Код: sql
1.
FIO = '''+Combobox1.Text+'''


ilovesomebody
Код: sql
1.
MYDATA = '''+Datetimepicker1.Date+'''

Используй параметры!
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623453
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m спасибо большое.
Получилось с этим. Отдельное спасибо за max(MYDATA), не думала, что сработает.

Но написать запрос, который выведет именно ПОСЛЕДНЮЮ запись с [b]max(MYDATA) . То есть не sum(Money) , а именно Money[/b]. То есть в результате запроса покажутся все сотрудники, которые получали деньги и можно будет увидеть кто сколько и когда последний раз получил.
То есть значения за позднейшую доступную дату для каждого сотрудника.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623459
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky спасибо, попробую.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623464
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyНо написать запрос, который выведет именно ПОСЛЕДНЮЮ запись с [b]max(MYDATA) . То есть не sum(Money) , а именно Money[/b]. То есть в результате запроса покажутся все сотрудники, которые получали деньги и можно будет увидеть кто сколько и когда последний раз получил.
То есть значения за позднейшую доступную дату для каждого сотрудника.

я могу написать такой запрос, однако боюсь что он многим здесь не понравится
так что подождем более сведущих в этом
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623473
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Запуталась что-то совсем.
По сути, логику я поняла, мне нужно вывести все записи из поля FIO, за самые поздние даты (max(MYDATA)), с соответствующими значениями в поле MONEY и TIMESTAMP.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623925
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody,

гдето так
Код: sql
1.
2.
3.
4.
SELECT m1.Fio, m1.Mydata,m1.Money 
  from Moneout m1
    join (SELECT m.Fio, max(m.Mydata) as Mydata from Moneout m group by m.Fio) m2 
      on m1.fio=m2.fio and m1.Mydata=m2.Mydata
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38623952
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Бяда с этими студентами, про нормализацию и слыхом не слыхивали. :)

почитай учебник по проектированию БД, потом тут http://www.ibase.ru/devinfo/joins.htm

ответ под спойлером, для ленивых
таблиц надо 2:

Код: sql
1.
2.
3.
4.
5.
справочник сотрудников 
NAROD
ID_MAN      INTEGER
MYDATA  DATE
FIO     VARCHAR



Код: sql
1.
2.
3.
4.
5.
6.
журнал начислений
BAPKI
ID      INTEGER
ID_MAN      INTEGER
MONEY   DECIMAL
STAMP   TIMESTAMP



Код: sql
1.
2.
3.
4.
5.
6.
7.
select
  N.ID_MAN,
  N.FIO,
  (select sum(money) from bapki b where b.id_man = n.id_man and b.stamp between ? and ?) as bablo,
  (select max(stamp) from bapki b where b.id_man = n.id_man and b.stamp between ? and ?) as m_date
from narod n
order by n.fio



...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38624067
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ivan_Pisarevsky
Cпасибо большое. Читаю про JOIN.
Однако мне непонятно, почему в первой таблице фигурирует MYDATA , ведь по сути, я рассчитывала так, что MYDATA - это дата выдачи денег сотруднику и она должна меняться. То есть Таблица 1 (справочник сотрудников) по сути не будет справочником?
Или я снова чего-то недопоняла..
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38624068
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m спасибо большое попробую!
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38624200
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody Ivan_Pisarevsky
Cпасибо большое. Читаю про JOIN.
Однако мне непонятно, почему в первой таблице фигурирует MYDATA , ведь по сути, я рассчитывала так, что MYDATA - это дата выдачи денег сотруднику и она должна меняться. То есть Таблица 1 (справочник сотрудников) по сути не будет справочником?
Или я снова чего-то недопоняла..
Ну кто знал что MYDATA это дата выдачи денег сотруднику
Иван решил что это дата приема на работу (ну или что-то подобное)
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38624544
Фотография S.G.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyСоздала таблицу:
Код: sql
1.
2.
3.
4.
5.
ID      INTEGER
MYDATA  DATE
FIO     VARCHAR
MONEY   DECIMAL
STAMP   TIMESTAMP



У вас FIO вводится каждый раз, когда выдаются деньги?
А вдруг в разных записях, для одного и того же человека, введут немного разные имена?

Вместо FIO в этой табличке должно быть какое-нибудь IDFIO (integer), и ссылаться на отдельную табличку с FIO.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38624566
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
S.G.У вас FIO вводится каждый раз, когда выдаются деньги?
А вдруг в разных записях, для одного и того же человека, введут немного разные имена?

Или совсем разные. В этом месяце деньги выдавались Ивановой, в следующем - уже Петровой, а
через год, глядишь, Сидоровой...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38624670
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7mИван решил что это дата приема на работу (ну или что-то подобное)а дата выдачи баблуш это stamp, я понял как-то так.
S.G.Вместо FIO в этой табличке должно быть какое-нибудь IDFIO (integer), и ссылаться на отдельную табличку с FIO.ты мой спойлер читал?
ilovesomebodyИли я снова чего-то недопоняла..да.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38628031
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В общем, не получилось у меня ничего. Я не разобралась и в итоге мне дали другое задание.
Постараюсь всё сделать сама, помогите только спроектировать таблицы правильно.

Существует автопарк из 30 машин - 10 грузовых, 10 легковых и 10 автобусов.
Каждый день несколько рандомных водителей получают талоны на заправку, наборы запчастей, новые колёса и наличные деньги.
Необходимо составить каждодневный отчёт о том, кто на сколько литров получил талонов ежедневно и в сумме за месяц. С этим проблем у меня не возникнет, я уже поняла как это делать.

Но помогите понять, как сделать так, чтобы в дальнейшем в любой день можно было поднять этот самый отчёт, на, допустим, прошлый месяц 25 число. Не понимаю.

Прочитала статьи по нормализации БД.
Планирую сделать так:

Код: sql
1.
2.
3.
4.
5.
6.
TABLE AVTOPARK
ID INTEGER
ID_AUTO INTEGER
AUTO_LEGKOVOY
AUTO_GRUZOVOY
AUTO_AUTOBUS



Код: sql
1.
2.
3.
4.
5.
TABLE TALONZAPRAVKA
ID INTEGER
ID_AUTO INTEGER
STAMP TIMESTAMP
FIO VARCHAR



Код: sql
1.
2.
3.
4.
5.
TABLE ZAPCHASTI
ID INTEGER
ID_AUTO INTEGER
STAMP TIMESTAMP
FIO VARCHAR



Код: sql
1.
2.
3.
4.
5.
TABLE KOLESA
ID INTEGER
ID_AUTO INTEGER
STAMP TIMESTAMP
FIO VARCHAR



Код: sql
1.
2.
3.
4.
5.
TABLE DENGI
ID INTEGER
ID_AUTO INTEGER
STAMP TIMESTAMP
FIO VARCHAR




По идее, таким образом я смогу видеть по каждой ТМЦ её изменения, привязаные к ID_AUTO. Если правильно вкурила суть нормализации, то лучше много маленьких табличек, чем мало больших :).

Запросы буду пробовать составлять сама.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38628040
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody
Код: sql
1.
2.
3.
AUTO_LEGKOVOY
AUTO_GRUZOVOY
AUTO_AUTOBUS


Здесь достаточно одного поля TYPE_AUTO со значениями 1, 2, 3.

А у денег еще важна сумма.
ilovesomebodyНеобходимо составить каждодневный отчёт о том, кто на сколько литров получил талонов ежедневно и в сумме за месяц. С этим проблем у меня не возникнет, я уже поняла как это делать.

Но помогите понять, как сделать так, чтобы в дальнейшем в любой день можно было поднять этот самый отчёт, на, допустим, прошлый месяц 25 число. Не понимаю.
Противоречиво, т.к. то, что понятно и то, что не понятно - одно и тоже.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38628050
Фотография DarkMaster
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody,

Ох, ну зачем тебе TIMESTAMP`ы то? Даты разве мало...

Я бы все эти выдачи талонов и т.п. свалил бы в одну табличку типа:
ID - внутренний ID, PK
IDFIO - кому выдали
ATYPE - что это (заправка, запчасти и т.п.)
ASUM - на какую сумму
ADATE - когда выдали (дата)

Из этой таблицы - легко вытащить суммы хоть на дату, хоть на период...
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38628051
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
wadman то есть понадобится ещё одна таблица? Я потом умру писать такие запросы

Код: sql
1.
2.
ID INTEGER
TYPE_AUTO VARCHAR


Тут будут три записи вида
1 легковой
2 грузовой
3 автобус
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38628078
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody wadman то есть понадобится ещё одна таблица?

Код: sql
1.
2.
ID INTEGER
TYPE_AUTO VARCHAR


Тут будут три записи вида
1 легковойодин
2 грузовой
3 автобус
Ну если нет желания то можно и не создавать такую таблицу, однако все-же лучше её создать
ilovesomebodyЯ потом умру писать такие запросы
Скорее необорот

ps/
Вместо FIO всё-же Id-работника (Ну и конечно еще справочник работников)
+ Справочник ТМЦ (айди, наименование, единица измерения)
и
Все четыре таблицы
TALONZAPRAVKA, ZAPCHASTI, KOLESA, DENGI

объединить в одну
что-то типа вот такого

Код: sql
1.
2.
3.
4.
5.
6.
7.
TABLE .....
   ID INTEGER   
   ID_AUTO INTEGER
   ID_FIO   INTEGER
   ID_TMC integer
   DMY     date 
   Kvo      Numeric(...)


ну гдето так
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38628088
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyЕсли правильно вкурила суть нормализации, то лучше много маленьких табличек, чем мало большихНе совсем. Скорее каждой сущности по табличке, но если сущности очень схожи, то несколько сущностей может жить в одной табличке с распределением по ролям (например сущность автомобиль, роли : грузовой, легковой) или например сущность запчасть тип колесо, двигатель и т.п.

ilovesomebodyЗапросы буду пробовать составлять сама.Похвально, кто старается сам, тем поможем. приноси на рецензию ;)

ilovesomebodyто есть понадобится ещё одна таблица?необязательно.
микроподстановки можно иной раз сделать прямо в запросе, увлекаться этим не стОит и только для совсем "микро"

case type_auto
when 1 then 'грузовой'
when 2 then 'автобус'
when 3 then 'легковой'
else 'самокат'
end as auto_type_str

ilovesomebodyЯ потом умру писать такие запросыНе верь ей внук, от этого не умирают. (с, анек)
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635770
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
До сих пор сижу.......... Потеряла уже всякую веру в себя. Всё сижу и сижу и не сдвинуться никуда. Зато запросы конечно уже научилась строить, но с логикой беда. Может потому, что она женская :(

Кому не жалко, подскажите идею, пожалуйста, как построить логику, у меня с этим, похоже, реально проблема.

У меня есть шесть наименований для каждого моего продукта, которые изменяются в течении месяца хаотично


Уже пыталась сделать вспомогательную таблицу, куда записывала дату последнего изменения для каждого item.

17 и 26 числа я хочу сделать выборку с каждым значением для item1...item6 на текущее число:
Для 17 числа (выделила красным):
Код: sql
1.
2.
3.
4.
5.
6.
item1 за 16
item2 за 14
item3 за 9
item4 за 15
item5 за 17
item6 за 15



Соответственно, для 26 числа (выделила зелёным):
Код: sql
1.
2.
3.
4.
5.
6.
item1 за 25
item2 за 23
item3 за 20
item4 за 23
item5 за 18
item6 за 25



Правильно ли будет создать для каждого item свою таблицу, потом доставать последнее значение для каждого item через select first 1 .... desc?
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635791
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я даже в Экселе накидала принцип:
автор

31 закладка на каждый день месяца и перенос данных на следующую закладку (следующее число месяца).
Каждый месяц новая книга.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635805
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyПравильно ли будет создать для каждого item свою таблицу, потом доставать последнее значение для каждого item через select first 1 .... desc?
Нет
Таблички
Код: plaintext
1.
2.
3.
4.
Items
    Id
    Name
    ....
и

Код: plaintext
1.
2.
3.
4.
Items_Change
   Item_Id
    DMY
.....
Код: sql
1.
select  i.name,(select first 1 G.DMY from items_Change G where g.item_id=I.id and G.DMY <=:DT order by G.DMY desc)   from Items I



Ну вот где-то так, если я правильно понял
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635815
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyПравильно ли будет создать для каждого item свою таблицунет.
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635825
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebodyЯ даже в Экселе накидала принцип:
31 закладка на каждый день месяца и перенос данных на следующую закладку (следующее число месяца).
Каждый месяц новая книга.
Ну вот всё готово, теперь перенеси весь этот "4-х мерный куб"
(а если объединить день с месяцем то получится "3-х мерный куб")
в SQL

ну в вот такую табличку
Код: plaintext
1.
2.
3.
4.
Avto_Id
TMC_Id
DMY
Kvo
.....
И дальше спокойно работай с ней

Ну и конечно надо справочник автомобилей
Справочник ТМЦ

зы. меня вот только напрягает немного разное описание
то автомобили и водители и "талоны на заправку, наборы запчастей, новые колёса и наличные деньги."
то просто продукты
то автомобили и "талоны на заправку, наборы запчастей, новые колёса и наличные деньги." (уже без водителей)
пора определиться
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635835
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ilovesomebody,
и в догонку
если желаемый результат "нельзя" получить одним запросом,
то можно написать хранимую процедуру в которой реализовать нужный алгоритм
...
Рейтинг: 0 / 0
Помогите пожалуйста с хитрым SELECT
    #38635895
ilovesomebody
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пошла учить матчасть....
Спасибо, что откликнулись.
...
Рейтинг: 0 / 0
28 сообщений из 28, показаны все 2 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Помогите пожалуйста с хитрым SELECT
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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