Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Составление SQL-запросов > Выборка последних трех столбцов (ячеек)


Автор: almagnit 3.6.2008, 07:52
У меня имеется таблица со столбцами дней месяца, мне нужно выбрать три последних дня, независимо

от количества дней в месяце. Есть ли элегантный способ решения данной задачи ?

Автор: Akina 3.6.2008, 08:04
LastDateInMonth = DateAdd(day,-1,DateAdd(month,1,FirstDateInMonth))

Автор: almagnit 3.6.2008, 09:00
Akina, твой вариант возвращает значение последних чисел месяца, а я хочу найти метод выборки

данных последних столбцов в таблице, не зная их общего количества количества.

Автор: skyboy 3.6.2008, 09:11
Цитата(almagnit @  3.6.2008,  06:52 Найти цитируемый пост)
со столбцами дней месяца

т.е. месяца мы не знаем? только день? 

Автор: almagnit 3.6.2008, 09:32
Цитата(skyboy @  3.6.2008,  09:11 Найти цитируемый пост)
т.е. месяца мы не знаем? только день?

 да сколько дней в месяце нам не известно, нужно получить три последних столбца в таблице.

Т.е. если февральская таблица значит day_27, day_28, day_29 и в таком духе для других месяцев.

ЗЫ:

Вообще мне пришла мысль чтоб брать 31 день если ошибка, 30 и т.д. пока не пропустит и потом уменьшать

счетчик от 3-х до нуля. Буду пробовать. Жду других вариантов.

Автор: Akina 3.6.2008, 09:48
Денормализованная таблица - источник геморроя.
В рамках SQL задача не решается.
Пора указать диалект SQL...

Автор: skyboy 3.6.2008, 09:53
Цитата(almagnit @  3.6.2008,  08:32 Найти цитируемый пост)
Т.е. если февральская таблица

т.е. номер месяца определяется только именем таблицы? 
отлично. тогда ты же запрос где-то формируешь? вот и определяй там, где формируешь запрос, сколько дней в месяце.
а что? ты же сам выбрал такой 
Цитата(Akina @  3.6.2008,  08:48 Найти цитируемый пост)
источник геморроя

может, переделаешь в нормальную структуру? 

Автор: almagnit 3.6.2008, 10:07
Цитата(Akina @  3.6.2008,  09:48 Найти цитируемый пост)
Денормализованная таблица - источник геморроя.

С чего ты это решил. База данных нормализирована по всем трем формам.


Цитата(Akina @  3.6.2008,  09:48 Найти цитируемый пост)
В рамках SQL задача не решается.

Понял, спасибо.


Цитата(Akina @  3.6.2008,  09:48 Найти цитируемый пост)
Пора указать диалект SQL...

Незнаю, база данных MySQL.

ЗЫ:
Всетаки не теряю надежды на решение этой задачи средствами SQL.

Автор: almagnit 3.6.2008, 10:38
Цитата(skyboy @  3.6.2008,  09:53 Найти цитируемый пост)
может, переделаешь в нормальную структуру? 

Буду рад приведенным примерам.

Цель базы данных состоит в том чтоб хранить в себе сформированный график выходов рабочих. При 

добавлении нового рабочего в базу данных формируется график выходов на весь год.

Я пользуюсь таблицами, "рабочие" и 12 таблиц для каждого месяца. Связь идет через поле табельного номера.

Подскажите мне, что именно нужно нормализировать для повышения эффективности ?

Автор: Deniz 3.6.2008, 10:45
Цитата(almagnit @  3.6.2008,  13:38 Найти цитируемый пост)
Я пользуюсь таблицами, "рабочие" и 12 таблиц для каждого месяца. Связь идет через поле табельного номера.

Подскажите мне, что именно нужно нормализировать для повышения эффективности ?
1 таблица на все 12 месяцев поля: таб№, дата, признаки всякие. Т.е. не day_1,  day_2, day_3, day_4, ... day_30, day_31 а по вертикали, где будет полная, нормальная дата.
А для отображения на клиенте крути как хочешь.

Автор: almagnit 3.6.2008, 11:28
Deniz, ты предлагаешь создать таблицу:
_______|Январь|Февраль|Март|...|
1 число  |\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\
2 число  |\\\\\\\\\\\" ДАННЫЕ " \\\\\\\
... число |\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\

А как ее связать с конкретным человеком по табельному № ? 

Создавать для каждого рабочего свою таблицу ?

Автор: skyboy 3.6.2008, 13:23
Цитата(almagnit @  3.6.2008,  09:07 Найти цитируемый пост)
 База данных нормализирована по всем трем формам.

знаешь, ты не прав.
Цитата(almagnit @  3.6.2008,  10:28 Найти цитируемый пост)
Создавать для каждого рабочего свою таблицу ?

нет. опять придешь к тому же. но только если количество дней в месяце <= 31, то рабочих будет.... ээээ.... ну. тебе виднее, сколько будет рабочих.
Цитата(almagnit @  3.6.2008,  09:38 Найти цитируемый пост)
Цель базы данных состоит в том чтоб хранить в себе сформированный график выходов рабочих. При добавлении нового рабочего в базу данных формируется график выходов на весь год.

задача все ещё не ясна. что есть, что надо сформировать и что выдать на выходе?

Автор: Akina 3.6.2008, 13:51
Цитата(almagnit @  3.6.2008,  11:07 Найти цитируемый пост)
С чего ты это решил. База данных нормализирована по всем трем формам.

У тебя есть одна сущность - количество рабочих часов (ну или чего там) в определенном дне для определенного работника. Она у тебя хранится в нескольких полях нескольких таблиц. И ты осмеливаешься ЭТО называть нормализацией???


Цитата(almagnit @  3.6.2008,  12:28 Найти цитируемый пост)
Deniz, ты предлагаешь создать таблицу:

А как ее связать с конкретным человеком по табельному № ? 

Создавать для каждого рабочего свою таблицу ? 

Структура таблицы такая:
  • ID
  • Worker_ID (видимо, таб. номер)
  • Date (дата)
  • Stored_Data (информация на работника на эту дату - скажем, количество раб. часов)
Можно не вводить поле ID, используя в качестве первичного индекса комбинацию полей Worker_ID и Date... хотя я бы не стал этого делать. А вот в зависимости от того, какие запросы на выборку в базу будут наиболее часты, строил бы от 1 до 4 индексов по полям Worker_ID и Date по отдельности или вместе в различном порядке. Индекс ускорит работу. Лишний индекс - замедлит. Ищи оптимум.

Автор: almagnit 3.6.2008, 16:27
Цитата(Akina @  3.6.2008,  13:51 Найти цитируемый пост)
Она у тебя хранится в нескольких полях нескольких таблиц.


Да я имею несколько таблиц вместо одной и я думаю что если количество рабочих будет несколько тыс.

то работать с отдельной таблицей(напр. на 10000 записей) будет рациональнее чем с одной общей (на 120 000 записей)

Цитата(Akina @  3.6.2008,  13:51 Найти цитируемый пост)
Структура таблицы такая:


Я думаю такая структура больше подходит для учета чего либо, а я нуждаюсь в планировании на год

Цитата(skyboy @  3.6.2008,  13:23 Найти цитируемый пост)
задача все ещё не ясна. что есть, что надо сформировать и что выдать на выходе?


На выходе мне нужно сформировать график выходных и рабочих дней трудящихся, спланировав его на год

ЗЫ:
Вообщето вопрос состоял не о нормализации моей БД (хотя об этом я хотел поговорить несколько позже),

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

тогда буду  smile дальше.  smile 


Автор: Akina 3.6.2008, 16:44
Цитата(almagnit @  3.6.2008,  17:27 Найти цитируемый пост)
работать с отдельной таблицей(напр. на 10000 записей) будет рациональнее чем с одной общей (на 120 000 записей)

Ну да... автомобиль с квадратными колесами рациональнее, чем с круглыми, потому что его черта с два угонят.

120 тыс. записей даже для Аксесса не нагрузка, а уж для MySQL, да еще таких простеньких - вообще семечки.
Цитата(almagnit @  3.6.2008,  17:27 Найти цитируемый пост)
Я думаю такая структура больше подходит для учета чего либо

Осмелюсь предположить, что сперва надо подучить теорию, а потом думать. И только после этого - делать. Уж извини...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)