Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
Здравствуйте, есть БД на 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
22 дек 18, 14:17    [21771042]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4253
rezalik, попробуй сделать это сам, опираясь на статью - ГРУППОВЫЕ ОПЕРАЦИИ В ЗАПРОСАХ ACCESS
22 дек 18, 16:03    [21771077]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
ПЕНСИОНЕРКА
Member

Откуда: Владимирская обл
Сообщений: 4530
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

\\\

ПОТОЧНЕЕ НАДО ГОТОВИТЬ ПРИМЕР
22 дек 18, 16:20    [21771083]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4253
ФИО значение Сумма ТолькоДата
ФИО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
22 дек 18, 16:52    [21771100]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
Панург, отлично, а как получилось так?
22 дек 18, 17:07    [21771105]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4253
rezalik, сам пробовал?
22 дек 18, 17:13    [21771107]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4253
+
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
;
22 дек 18, 17:17    [21771108]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5875
Еще вариант:
запрос:
SELECT tbl.fio, Sum(tbl.zn) AS [Sum-zn], my([tbl]!myDate) AS Выражение1
FROM tbl
GROUP BY tbl.fio, my([tbl]!myDate);
функция:
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
22 дек 18, 17:49    [21771114]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4253
sdku, (не проверял твоё решение) а если будет?

ФИО1 ; значение 1 ; 10.11.2016 8:15 ; 200
...
22 дек 18, 18:04    [21771119]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
Панург, я не понял как с датой так получилось.
22 дек 18, 18:35    [21771123]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
Панург, вот с суммой я разобрался благодаря Вам, а подскажите теперь с датой как решить, что в групповой операции и в условии отбора указать, по SQL коду не разобрался.
22 дек 18, 19:17    [21771143]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5875
Панург,
прошу пардон-вот так (даже проверил-все праильно.Единственное что должен решить ТС это как быть с секундами. До 8:30 по времени будут входить в предыдущую дату)
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")));
22 дек 18, 19:35    [21771145]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
sdku, прошу прощенья, сам себя загнал в тупик. Вот на изображении подробней будет.

К сообщению приложен файл. Размер - 127Kb
22 дек 18, 20:03    [21771160]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
sdku,

К сообщению приложен файл. Размер - 143Kb
22 дек 18, 20:10    [21771165]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
IdCodePatient - id поступления
NamePatient - ФИО
AdmDatePatient - дата поступления
DepDatePatient - дата перевода
NameWO - название жидкости
DateTimeWB - дата и время замера жидкости
VolumeWB - объем

И вот рассчитать за сутки весь объем. Только вот сутки начинаются по всем критериям в 8:30, а заканчиваются в 8:29 это критично важно.
22 дек 18, 20:18    [21771166]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
sdku, создал отдельную таблицу с интересующими параметрами, что бы больше условий не было.

К сообщению приложен файл. Размер - 120Kb
22 дек 18, 20:44    [21771178]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
sdku, вот что получилось

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;
22 дек 18, 20:45    [21771180]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5875
rezalik,
Самое сложное это внести данные и сочинить таблицу -выложите не скрин,а таблицу в ACCESS - сделаю запрос (Вам нужна сумма по каждой фамилии за сутки начинающиеся в 8.30 и заканчивающиеся в 8:29 следующего дня-правильно? Если нет поправьте.Вопрос - какая точность Вам необходима hh:mm:ss или достаточно hh:mm?)
22 дек 18, 21:24    [21771189]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5875
rezalik,
Самое сложное это внести данные и сочинить таблицу -выложите не скрин,а таблицу в ACCESS - сделаю запрос (Вам нужна сумма по каждой фамилии за сутки начинающиеся в 8.30 и заканчивающиеся в 8:29 следующего дня-правильно? Если нет поправьте.Вопрос - какая точность Вам необходима hh:mm:ss или достаточно hh:mm? Или то что у Вас получилось удовлетворяет-тогда все)
22 дек 18, 21:28    [21771190]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
sdku
Member

Откуда: Краснодар
Сообщений: 5875
Да,вдогонку:глянул Ваш скрин и появились большие сомнения в правильности структуры так что покажите БД
22 дек 18, 21:32    [21771193]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
sdku, спасибо, убрал фамилии.

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

Да, правильно :).

СПАСИБО!
https://cloud.mail.ru/public/GGSK/rnxhuj7TB
22 дек 18, 21:49    [21771197]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
Swa111
Member

Откуда:
Сообщений: 104
rezalik,

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 - время в секундах в сутках
22 дек 18, 23:18    [21771223]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить и посчитать данные.  [new]
rezalik
Member

Откуда: Москва
Сообщений: 11
Swa111, СПАСИБО, вот прям огромное человеческое спасибо!!!
22 дек 18, 23:37    [21771224]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить