Topic: Вычисление прошедшего времени и вывод через SQL запрос

Есть два поля времени zurnal_cpu.vremia_ostanovki и zurnal_cpu.vremia_sdaci. Необходимо высчитать прошедшее время между ними и вывести через SQL запрос в таблицу. Понимаю что нужно создать вычисляемое поле, пробовал разные варианты, но везде ошибки. Помогите пожалуйста.
SQL запрос который использую:

SELECT
zurnal_cpu.id,
info_stanka.invent_nomer,
strftime('%d.%m.%Y', zurnal_cpu.data),
info_stanka.vnutr_nazv_cpu,      
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci), 
zurnal_cpu.pricina_ostanovki,             
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,
zurnal_cpu.vipolnenie_raboti,
smeni.smeni,          
info_stanka.id_firmi_postavsiki,
info_stanka.id_tip_satanka,
info_stanka.nazv_stanka,
info_stanka.zavod_nomer,
zurnal_cpu.test
                      
FROM
zurnal_cpu 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka
LEFT OUTER JOIN smeni ON smeni.id=zurnal_cpu.id_smeni

WHERE
(CASE WHEN '{poisk}' <> '' THEN info_stanka.invent_nomer LIKE '%{poisk}%' or
info_stanka.vnutr_nazv_cpu LIKE '%{poisk}%' or                               
info_stanka.id_firmi_postavsiki LIKE '%{poisk}%' or 
info_stanka.id_tip_satanka LIKE '%{poisk}%' or                                             
info_stanka.nazv_stanka LIKE '%{poisk}%' or
info_stanka.zavod_nomer LIKE '%{poisk}%' or
zurnal_cpu.pricina_ostanovki LIKE '%{poisk}%' or
zurnal_cpu.code_error LIKE '%{poisk}%' or 
zurnal_cpu.tekst_oshibki LIKE '%{poisk}%' or
zurnal_cpu.vipolnenie_raboti LIKE '%{poisk}%'  
ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN date(zurnal_cpu.data) = date({DateTimePicker1}) ELSE 1=1 END) AND
(CASE WHEN {DateTimePicker2} IS NOT NULL THEN strftime('%m.%Y', zurnal_cpu.data) = strftime('%m.%Y', {DateTimePicker2}) ELSE 1=1 END) AND 
(CASE WHEN {ComboBox1} <> -1 THEN zurnal_cpu.id_smeni = {ComboBox1} ELSE 1=1 END)
                                                    
ORDER BY zurnal_cpu.data DESC                                                                         

Re: Вычисление прошедшего времени и вывод через SQL запрос

создайте вычисляемое поле в самой БД а через SQL запрос просто выведите это поле в результат

Re: Вычисление прошедшего времени и вывод через SQL запрос

sibprogsistem wrote:

создайте вычисляемое поле в самой БД а через SQL запрос просто выведите это поле в результат

Может быть сможете привести пример вычисляемого поля?

4 (edited by sibprogsistem 2019-08-02 12:05:24)

Re: Вычисление прошедшего времени и вывод через SQL запрос

(
SELECT julianday(date2) - julianday(date1) FROM a  
) 

Разница в часах

Select Cast ((
    JulianDay(ToDate) - JulianDay(FromDate)
) * 24 As Integer)
Разница в минутах

Select Cast ((
    JulianDay(ToDate) - JulianDay(FromDate)
) * 24 * 60 As Integer)
Разница в секундах

Select Cast ((
    JulianDay(ToDate) - JulianDay(FromDate)
) * 24 * 60 * 60 As Integer)

Re: Вычисление прошедшего времени и вывод через SQL запрос

В итоге пришёл вот к такому варианту

strftime('%s', zurnal_cpu.vremia_sdaci)/60-strftime('%s', zurnal_cpu.vremia_ostanovki)/60

Получив время простоя в минутах. Однако, для дальнейших операций в экселе мне необходимо данное значение разделить на 1440. После операции деления на 1440 выводятся только целые значения (1,2,3), можно каким либо образом получить десятые, сотые, тысячные? Но в идеале стремлюсь на выходе получить значения в виде ЧЧ:ММ.

Re: Вычисление прошедшего времени и вывод через SQL запрос

посмотрите данную тему
https://stackoverflow.com/questions/807 … iven-dates

Dmitry.

Re: Вычисление прошедшего времени и вывод через SQL запрос

Дмитрий, спасибо, посмотрев тему разобрался. Прилагаю получившийся в итоге запрос с возможностью суммарного подсчета:

SELECT 
tip_satanka.tip_stanka,
info_stanka.id,
zurnal_cpu.id,
smeni.id,
strftime('%d.%m.%Y', zurnal_cpu.data),
info_stanka.vnutr_nazv_cpu,      
strftime('%H:%M', zurnal_cpu.vremia_ostanovki),
strftime('%H:%M', zurnal_cpu.vremia_sdaci), 
zurnal_cpu.pricina_ostanovki,
zurnal_cpu.code_error,
zurnal_cpu.tekst_oshibki,
zurnal_cpu.vipolnenie_raboti,                   
smeni.smeni,
info_stanka.id_firmi_postavsiki,
info_stanka.nazv_stanka,
info_stanka.invent_nomer,                  
info_stanka.zavod_nomer,
CAST(SUM (strftime('%s', zurnal_cpu.vremia_sdaci)-strftime('%s', zurnal_cpu.vremia_ostanovki)) / (3600) AS TEXT) || ':' ||
CAST((SUM (strftime('%s', zurnal_cpu.vremia_sdaci)-strftime('%s', zurnal_cpu.vremia_ostanovki)) % (3600)) / 60 AS TEXT) 
                                                                                                                                                                                                                                            
FROM
zurnal_cpu                                                                                                 
LEFT OUTER JOIN info_stanka ON info_stanka.id=zurnal_cpu.id_info_stanka                          
LEFT OUTER JOIN smeni ON smeni.id=zurnal_cpu.id_smeni                                                                       
LEFT OUTER JOIN tip_satanka ON tip_satanka.id=info_stanka.id_tip_satanka
           
WHERE                  
(CASE WHEN {DateTimePicker1} IS NOT NULL THEN strftime('%m.%Y', zurnal_cpu.data) = strftime('%m.%Y', {DateTimePicker1}) ELSE 1=1 END)

GROUP BY info_stanka.id 
ORDER BY tip_satanka.tip_stanka