Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2009, 01:10   #11
soleil@mmc
SQL-коддинг
Участник клуба
 
Регистрация: 16.01.2009
Сообщений: 1,192
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Хотите увидеть оценки только за 1-е сентября?!
ну так и пишите дата = первое сентября.. к чему этот мазохизм?!
там еще наверное и время проставляется
тогда придется даты транкейтить при сравнении

З.Ы.: а ваще-то при таком указании диапазона дат вернутся записи, даты которых равны '01.09.2009 00:00:00'
soleil@mmc вне форума Ответить с цитированием
Старый 08.11.2009, 09:08   #12
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от soleil@mmc Посмотреть сообщение
там еще наверное и время проставляется
тогда придется даты транкейтить при сравнении

З.Ы.: а ваще-то при таком указании диапазона дат вернутся записи, даты которых равны '01.09.2009 00:00:00'
Я тоже об этом подумывал, но попробовал смастерить в IBExpert табличку и запрос этот нормально работает и когда параметром даты передаются и строкой.
pu4koff вне форума Ответить с цитированием
Старый 08.11.2009, 10:57   #13
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
2. На эту дату оценки точно есть? Запрос в своей программе тестируется или через IBExpert?
Да, есть.
Цитата:
таблицы spisok s, mark m
НЕ СВЯЗАНЫ условием в WHERE
Добавил условие связи.
Цитата:
А что за условие дата оценки БОЛЬШЕ и равна 1сентября и дата оценки МЕНЬШЕ и равна 1сентября.
Сергей, Вы ж помните, что у меня четверть задается двумя значениями: начальной и конечной датами. Следовательно, чтобы посчитать количество оценок за выбранную четверть, должны быть известна начальная и конечная точка, чтобы считалось между тем то и тем то.
Цитата:
и я бы ещё "грешил" на формат даты
Сомневаюсь, что проблема в формате даты.
Цитата:
точно там только оценки до первого сентября включительно?
Точно.
Цитата:
там еще наверное и время проставляется
Нет, время не задается. Только дата.
Цитата:
а ваще-то при таком указании диапазона дат вернутся записи, даты которых равны '01.09.2009 00:00:00'
Возвращается значение null null
Пока получился такой запрос:
Код:
select ocenka, count(ocenka)
from mark,spisok
where (mark.withspisok=spisok.id) and (withspisok = 1) and (datamark >= '01.09.2009') and (datamark < '01.09.2009')
group by ocenka
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.

Последний раз редактировалось artemavd; 08.11.2009 в 11:12.
artemavd вне форума Ответить с цитированием
Старый 08.11.2009, 11:01   #14
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
у меня четверть задается двумя значениями: начальной и конечной датами
И что - четверть длится один день???
Задайте
(datamark >= '01.09.2009') and (datamark < '01.10.2009')
и увидите оценки за весь сентябрь.
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 11:28   #15
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Точно, дату то я неправильно задаю. Потому и null. Выполнил такой запрос:
Код:
select ocenka, count(ocenka)
from mark,spisok
where (mark.withspisok=spisok.id) and (mark.withspisok=spisok.id) and (withspisok = 1) and (datamark >= '01.11.2009') and (datamark < '10.11.2009')
group by ocenka
01.11.2009 - начало
10.11.2009 - окончание
Получил результат как на скрине под №1. На скрине под №2 содержимое таблицы mark. Правильно ли я понял, что этот запрос будет считать для человека, у которого ID=1, т.е. withspisokl=1?? И четверки, и пятерки и т.д.
Изображения
Тип файла: jpg 1.jpg (54.4 Кб, 28 просмотров)
Тип файла: jpg 2.jpg (83.0 Кб, 26 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 08.11.2009, 11:40   #16
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

И опять... Что это за "чудо"?
where (mark.withspisok=spisok.id) and (mark.withspisok=spisok.id)
И при чем тут опять таблица spisok?!
В ней что - есть поле ocenka ?
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 11:52   #17
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
И опять... Что это за "чудо"?
where (mark.withspisok=spisok.id) and (mark.withspisok=spisok.id)
Согласен. Что с этим, что без него, на результат не влияет.
mihali4, что на счет моего вопроса в посте №15?
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 08.11.2009, 11:54   #18
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Сделайте
select id, withspisok, ocenka, count(ocenka)
и проверите...
mihali4 вне форума Ответить с цитированием
Старый 08.11.2009, 12:05   #19
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Я просто добавил еще другие виды оценок в таблицу. И даты разные, но чтобы они входили в диапозон между началом и концом четверти . Получилось так. Посчиталось количество всех видов оценок в указанном диапозоне дат. Часть то, что мне и нужно было. Еще вопрос: как сделать, чтобы посчитанное количество выводилось в таблицу №2? Чтобы в итоге получалось как на скрине №3. Хотя бы на примере одного человека. Может остальных додумаюсь сам
Изображения
Тип файла: png 3.png (4.9 Кб, 26 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 08.11.2009, 12:34   #20
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,065
По умолчанию

Цитата:
Сообщение от artemavd Посмотреть сообщение
Еще вопрос: как сделать, чтобы посчитанное количество выводилось в таблицу №2? Чтобы в итоге получалось как на скрине №3. Хотя бы на примере одного человека. Может остальных додумаюсь сам
Самое простое: для каждого учащегося выполнить запрос и результаты рассовать в StringGrid. Только как будешь синхронизировать эти две таблицы на экране? Будет 100 учеников, допустим, появится полоса прокрутки. Слева отличник выбран, а напротив оценки двоечника получились. Лишние проблемы от этого, на мой взгляд
Ну и раз этот запрос нужен для всех школьников, то может ну нафиг проверку на ID ученика? В группировку только добавить еще withspisok:
Код:
select withspisok, ocenka, count(ocenka)
from mark
where (datamark >= '01.11.2009') and (datamark <= '01.11.2009')
group by withspisok, ocenka
и в результате получим набор из (ID ученика, оценка, кол-во оценок).
Так же можно создать соответствующую view (хотя можно и без неё) и нормально отображать в одной таблице и данные ученика и число его оценок.
Также можно прилепить триггеры на изменение оценок (добавление/изменение/удаление) и в таблицу spisok записывать число оценок. Поставили иванову двойку, увеличили spisok.ocenka2 на 1, исправили 3 на 4, уменьшили spisok.ocenka3 и увеличили spisok.ocenka4. Как-то так в общем. Поддержка базы в актуальном состоянии усложнится, но зато выборка учеников быстрее будет, т.к. не нужно будет СУБД каждый раз все оценки перелопачивать.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сложный расчет З/П VictorM Microsoft Office Excel 7 08.11.2009 16:51
Расчет зума Саня_Д Microsoft Office Excel 4 21.10.2009 15:21
Расчет количества в БД Excell, использование сводных таблиц? ITM Microsoft Office Excel 10 12.01.2009 14:41
Расчет средневзешенного zoman Microsoft Office Excel 2 05.12.2007 10:15