Click here to Skip to main content
15,912,457 members
Please Sign up or sign in to vote.
1.00/5 (2 votes)
See more:
Need report for today

When put code without this line

#where p.VrijemePrijave = CURDATE()


Working fine

When put this line (Report for today) result is empty

What I have tried:

SQL
SELECT o.Ime, 
sum(case when (TIME(p.VrijemePrijave) between '13:00' and '22:00') and (TIME(p.VrijemeOdjave) between '00:00' and '04:00')  then (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF('22:00', DATE_FORMAT(p.VrijemePrijave,'%H:%i:%s')))) / 3600))  else case when (TIME(p.VrijemePrijave) between '17:00' and '22:00') and (TIME(p.VrijemeOdjave) between '00:00' and '15:00')  then 0 else (case when WEEKDAY(VrijemePrijave) in (5, 6) then 0 else (CASE WHEN(SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(p.VrijemeOdjave, p.VrijemePrijave))) / 3600)) > 8 THEN 8 else (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(p.VrijemeOdjave, p.VrijemePrijave))) / 3600)) END) end) end end ) AS 'SATI [h]',   
sum(case when (TIME(p.VrijemePrijave) between '13:00' and '22:00') and (TIME(p.VrijemeOdjave) between '00:00' and '04:00') then (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(p.VrijemeOdjave,'%H:%i:%s'), '06:00'))) / 3600)) else case when (TIME(p.VrijemePrijave) between '17:00' and '22:00') and (TIME(p.VrijemeOdjave) between '00:00' and '15:00') then (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(p.VrijemeOdjave,'%H:%i:%s'), '06:00'))) / 3600)) + (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF('22:00', DATE_FORMAT(p.VrijemePrijave,'%H:%i:%s')))) / 3600)) else  (case when WEEKDAY(VrijemePrijave) in (5, 6) then(SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(p.VrijemeOdjave, p.VrijemePrijave))) / 3600)) else (CASE WHEN(SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(p.VrijemeOdjave, p.VrijemePrijave))) / 3600)) > 8 THEN((SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(p.VrijemeOdjave, p.VrijemePrijave))) / 3600)) - 8) else NULL END) end) end end) AS 'PREKOVREMENO [h]',   
sum(case when (TIME(p.VrijemePrijave) between '13:00' and '22:00') and (TIME(p.VrijemeOdjave) between '00:00' and '12:00')  then (SELECT CASE WHEN TIME(p.VrijemeOdjave) between '06:00' and '06:59' THEN 8 ELSE (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(p.VrijemeOdjave,'%H:%i:%s'), '00:00'))) / 3600))+2 END) else case when (TIME(p.VrijemePrijave) between '17:00' and '22:00') and (TIME(p.VrijemeOdjave) between '00:00' and '15:00')  then (SELECT CASE WHEN TIME(p.VrijemeOdjave) between '06:00' and '06:59' THEN (SELECT FLOOR((TIME_TO_SEC(TIMEDIFF(DATE_FORMAT(p.VrijemeOdjave,'%H:%i:%s'), '00:00'))) / 3600))+2 ELSE 8 END) else null end end) as 'NOCNI RAD'
from prijava_radnika p inner
join osoba o on o.IdOsoba = p.IdPosjetioc
#where p.VrijemePrijave = CURDATE() 
group by o.Ime 
order by o.Ime; 
Posted
Updated 5-Oct-18 0:12am
v2

1 solution

Basically, start with your data. Check the values in prijava_radnika.VrijemePrijave and see exactly what values you have in there - remember that equals for dates requires the dates to be identical, right to the tick, so midday today will not match 12:00:00:00001 today, and CURDATE returns a string / number based on context which needs to exactly match the values you are comparing.

Sorry, but we can't do that for you!
 
Share this answer
 
Comments
Goran Bibic 5-Oct-18 5:03am    
prijava_radnika.VrijemePrijave have values exp. 06,11,23...etc (date of the month)
OriginalGriff 5-Oct-18 5:12am    
Which won't match the whole date returned by CURDATE:
https://www.w3schools.com/sql/func_mysql_curdate.asp
Goran Bibic 5-Oct-18 5:21am    
Solved. Thank you
OriginalGriff 5-Oct-18 5:29am    
You're welcome!

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900