powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вытащить и посчитать данные.
23 сообщений из 23, страница 1 из 1
Вытащить и посчитать данные.
    #39751625
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, есть БД на access 2003. Таблица типа:
ФИО1 ; значение 1 ; 10.11.2016 8:30 ; 200 ;
ФИО1 ; значение 1 ; 10.11.2016 9:00 ; -200 ;
ФИО2 ; значение 1 ; 10.11.2016 9:30 ; 300 ;
ФИО1 ; значение 1 ; 10.11.2016 9:30 ; 300 ;
ФИО3 ; значение 1 ; 10.11.2016 10:30 ; 300 ;
ФИО5 ; значение 1 ; 12.11.2016 9:30 ; -300 ;
ФИО1 ; значение 1 ; 10.11.2016 15:30 ; 400 ;
ФИО2 ; значение 1 ; 10.11.2015 9:30 ; 300 ;
ФИО4 ; значение 1 ; 13.11.2016 11:30 ; 500 ;
ФИО1 ; значение 1 ; 10.11.2016 9:30 ; 300 ;
ФИО3 ; значение 1 ; 10.11.2016 9:30 ; 700 ;
ФИО3 ; значение 1 ; 17.11.2016 22:30 ; 600 ;
ФИО6 ; значение 1 ; 10.11.2016 16:00 ; 300 ;
ФИО12 ; значение 1 ; 10.11.2016 9:30 ; 300 ;

Подскажите пожалуйста, нужно сделать что бы у каждого ФИО и на каждую дату было сумма значений за сутки с 8:30 до 8:29 типа:
ФИО1 ; Значение1 ; 10.11.2016 ; 1600
ФИО1 ; Значение1 ; 11.11.2016 ; 800
ФИО2 ; Значение1 ; 10.11.2016 ; 1900
ФИО3 ; Значение1 ; 13.11.2016 ; 1600
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751656
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rezalik, попробуй сделать это сам, опираясь на статью - ГРУППОВЫЕ ОПЕРАЦИИ В ЗАПРОСАХ ACCESS
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751661
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rezalikЗдравствуйте, есть БД на access 2003. Таблица типа
специально отсортировала, но итогов не получила(вернее получился только для ФИО3)
ФИО1 значение 1 10.11.2016 8:30 200 ФИО1 значение 1 10.11.2016 9:00 -200 ФИО1 значение 1 10.11.2016 9:30 300 ФИО1 значение 1 10.11.2016 9:30 300 ФИО1 значение 1 10.11.2016 15:30 400 ФИО12 значение 1 10.11.2016 9:30 300 ФИО2 значение 1 10.11.2015 9:30 300 ФИО2 значение 1 10.11.2016 9:30 300 ФИО3 значение 1 10.11.2016 9:30 700 ФИО3 значение 1 10.11.2016 10:30 300 ФИО3 значение 1 17.11.2016 22:30 600 1600ФИО4 значение 1 13.11.2016 11:30 500 ФИО5 значение 1 12.11.2016 9:30 -300 ФИО6 значение 1 10.11.2016 16:00 300


нужно сделать что бы у каждого ФИО и на каждую дату было сумма значений за сутки с 8:30 до 8:29 типа:
ФИО1 Значение1 10.11.2016 1600ФИО1 Значение1 11.11.2016 800ФИО2 Значение1 10.11.2016 1900
\\\

ПОТОЧНЕЕ НАДО ГОТОВИТЬ ПРИМЕР
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751678
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ФИО значение Сумма ТолькоДатаФИО1 значение 1 1000 10.11.2016ФИО12 значение 1 300 10.11.2016ФИО2 значение 1 300 10.11.2015ФИО2 значение 1 300 10.11.2016ФИО3 значение 1 1000 10.11.2016ФИО3 значение 1 600 17.11.2016ФИО4 значение 1 500 13.11.2016ФИО5 значение 1 -300 12.11.2016ФИО6 значение 1 300 10.11.2016
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751679
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, отлично, а как получилось так?
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751681
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rezalik, сам пробовал?
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751682
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
SELECT
    Таблица.ФИО                   ,
    Таблица.значение              ,
    Sum(Таблица.Деньги) AS [Сумма],
    q1.OnlyDate         AS ТолькоДата
FROM
    Таблица
    INNER JOIN
        (
            SELECT
                DateValue([Дата])           as OnlyDate ,
                DateAdd("n",510,OnlyDate)   AS DateStart,
                DateAdd("n",1949, OnlyDate) AS DateStop
            FROM
                Таблица
            UNION
            SELECT
                DateValue([Дата])-1        as OnlyDate ,
                DateAdd("n",510,OnlyDate)  AS DateStart,
                DateAdd("n",1949,OnlyDate) AS DateStop
            FROM
                Таблица
        )
        AS q1
        ON
            (
                Таблица.Дата Between q1.DateStart AND q1.DateStop
            )
GROUP BY
    Таблица.ФИО     ,
    Таблица.значение,
    q1.OnlyDate
ORDER BY
    1,
    4
;

...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751687
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще вариант:
запрос:
Код: vbnet
1.
2.
3.
SELECT tbl.fio, Sum(tbl.zn) AS [Sum-zn], my([tbl]!myDate) AS Выражение1
FROM tbl
GROUP BY tbl.fio, my([tbl]!myDate);

функция:
Код: vbnet
1.
2.
3.
4.
5.
6.
Function my(myDate)
Dim st, fin
st = Format(myDate, "dd.mm.yy") & " 8:30"
fin = Format(myDate + 1, "dd.mm.yy") & " 8:29"
my = ">=#" & st & "# and <=#" & fin & "#"
End Function
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751690
Фотография Панург
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sdku, (не проверял твоё решение) а если будет?

ФИО1 ; значение 1 ; 10.11.2016 8:15 ; 200
...
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751693
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, я не понял как с датой так получилось.
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751701
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Панург, вот с суммой я разобрался благодаря Вам, а подскажите теперь с датой как решить, что в групповой операции и в условии отбора указать, по SQL коду не разобрался.
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751703
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Панург,
прошу пардон-вот так (даже проверил-все праильно.Единственное что должен решить ТС это как быть с секундами. До 8:30 по времени будут входить в предыдущую дату)
Код: vbnet
1.
2.
3.
SELECT tbl.fio, Sum(tbl.zn) AS [Sum-zn], IIf([myDate]<Format([myDate],"dd/mm/yyyy") & " 8:30",Format([myDate]-1,"dd/mm/yyyy"),IIf([myDate]>=Format([myDate],"dd/mm/yyyy") & " 8:30" And [myDate]<=Format([myDate]+1,"dd/mm/yyyy") & " 8:30",Format([myDate],"dd/mm/yyyy"))) AS Выражение1
FROM tbl
GROUP BY tbl.fio, IIf([myDate]<Format([myDate],"dd/mm/yyyy") & " 8:30",Format([myDate]-1,"dd/mm/yyyy"),IIf([myDate]>=Format([myDate],"dd/mm/yyyy") & " 8:30" And [myDate]<=Format([myDate]+1,"dd/mm/yyyy") & " 8:30",Format([myDate],"dd/mm/yyyy")));
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751717
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, прошу прощенья, сам себя загнал в тупик. Вот на изображении подробней будет.
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751721
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku,
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751722
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
IdCodePatient - id поступления
NamePatient - ФИО
AdmDatePatient - дата поступления
DepDatePatient - дата перевода
NameWO - название жидкости
DateTimeWB - дата и время замера жидкости
VolumeWB - объем

И вот рассчитать за сутки весь объем. Только вот сутки начинаются по всем критериям в 8:30, а заканчиваются в 8:29 это критично важно.
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751729
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, создал отдельную таблицу с интересующими параметрами, что бы больше условий не было.
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751730
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, вот что получилось

Код: sql
1.
2.
3.
SELECT моча1.IdCodePatient, моча1.NamePatient, моча1.CaseRepPatient, моча1.AdmDatePatient, моча1.DepDatePatient, моча1.NameWO, моча1.VolumeWB, Sum(моча1.VolumeWB) AS [Sum-сумма], IIf([моча1.DateTimeWB]<Format([моча1.DateTimeWB],"dd/mm/yyyy") & " 8:30",Format([моча1.DateTimeWB]-1,"dd/mm/yyyy"),IIf([моча1.DateTimeWB]>=Format([моча1.DateTimeWB],"dd/mm/yyyy") & " 8:30" And [моча1.DateTimeWB]<=Format([моча1.DateTimeWB]+1,"dd/mm/yyyy") & " 8:30",Format([моча1.DateTimeWB],"dd/mm/yyyy"))) AS Выражение1
FROM моча1
GROUP BY моча1.IdCodePatient, моча1.NamePatient, моча1.CaseRepPatient, моча1.AdmDatePatient, моча1.DepDatePatient, моча1.NameWO, моча1.VolumeWB, IIf([моча1.DateTimeWB]<Format([моча1.DateTimeWB],"dd/mm/yyyy") & " 8:30",Format([моча1.DateTimeWB]-1,"dd/mm/yyyy"),IIf([моча1.DateTimeWB]>=Format([моча1.DateTimeWB],"dd/mm/yyyy") & " 8:30" And [моча1.DateTimeWB]<=Format([моча1.DateTimeWB]+1,"dd/mm/yyyy") & " 8:30",Format([моча1.DateTimeWB],"dd/mm/yyyy"))), tbl.fio;
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751737
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rezalik,
Самое сложное это внести данные и сочинить таблицу -выложите не скрин,а таблицу в ACCESS - сделаю запрос (Вам нужна сумма по каждой фамилии за сутки начинающиеся в 8.30 и заканчивающиеся в 8:29 следующего дня-правильно? Если нет поправьте.Вопрос - какая точность Вам необходима hh:mm:ss или достаточно hh:mm?)
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751738
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rezalik,
Самое сложное это внести данные и сочинить таблицу -выложите не скрин,а таблицу в ACCESS - сделаю запрос (Вам нужна сумма по каждой фамилии за сутки начинающиеся в 8.30 и заканчивающиеся в 8:29 следующего дня-правильно? Если нет поправьте.Вопрос - какая точность Вам необходима hh:mm:ss или достаточно hh:mm? Или то что у Вас получилось удовлетворяет-тогда все)
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751740
Фотография sdku
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да,вдогонку:глянул Ваш скрин и появились большие сомнения в правильности структуры так что покажите БД
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751744
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
sdku, спасибо, убрал фамилии.

sdku Вам нужна сумма по каждой фамилии за сутки начинающиеся в 8.30 и заканчивающиеся в 8:29 следующего дня-правильно?
Да, правильно :).

СПАСИБО!
https://cloud.mail.ru/public/GGSK/rnxhuj7TB
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751760
Swa111
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
rezalik,

Код: sql
1.
2.
3.
SELECT моча1.IdCodePatient, int([DateTimeWB] - 30600 / 86400) AS dDate, sum(VolumeWB)as  nAmount
FROM моча1
group by int([DateTimeWB] - 30600 / 86400), IdCodePatient


относительно элегантное решение, да и по скорости должно быть быстрее, суть идеи в том что бы сдвинуть начало дня на 8:30, а дальше применяем стандартную функцию взятия целого дня

магические числа:
30600 - время в секундах ((8 ч* 60мин) + 30 мин) * 60 сек
86400 - время в секундах в сутках
...
Рейтинг: 0 / 0
Вытащить и посчитать данные.
    #39751761
rezalik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Swa111, СПАСИБО, вот прям огромное человеческое спасибо!!!
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Вытащить и посчитать данные.
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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