webForumDet fria alternativet

veckan ska börjar på en måndag och inte söndag

Databaser & SQL

9 svar · 817 visningar · startad av swingman

Medlem sedan jan. 200686 inlägg
Frågan#1

Hej...
med följande sql sats så får jag data för pågående vecka men den börjar på söndag och slutar på lördag. Kan nån hjälpa mig modifiera sql satsen så att jag få ut data från en måndag till söndag istället.

SELECT d.name_,i.key_,i.start_,i.end_
FROM   jbpm_processdefinition d, jbpm_processinstance i
where (d.id_ = i.processdefinition_)
and (yearweek(i.end_) =yearweek(CURRENT_TIMESTAMP)
OR (yearweek(i.start_) = yearweek(CURRENT_TIMESTAMP) ) )
Medlem sedan maj 20011 826 inlägg
#2

Det är bara en parameter till YEARWEEK(), kolla i MySQL-manualen. Jag tror att det ska vara nåt liknande:

YEARWEEK(CURRENT_TIMESTAMP, 1)

Du måste naturligtvis skicka med den parametern på alla ställen du använder YEARWEEK().

EDIT:
Kolla http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_yearweek
och http://dev.mysql.com/doc/refman/5.1/en/date-and-time-functions.html#function_week

Det ska vara

YEARWEEK(CURRENT_TIMESTAMP, 1)
Medlem sedan jan. 200686 inlägg
#3

tyvärr fattar jag inte riktigt...jag gjorde om så här men då får jag data från föregående vecka som började på söndag den 3:e jan -Lördag den 9:e jan. Jag vill få data från måndag till söndag och inte söndag till lördag!
SELECT d.name_,i.key_,i.start_,i.end_
FROM jbpm_processdefinition d, jbpm_processinstance i
where (d.id_ = i.processdefinition_)
and (yearweek(i.end_) =yearweek(CURRENT_TIMESTAMP,1)
OR (yearweek(i.start_) = yearweek(CURRENT_TIMESTAMP,1) ) );

Medlem sedan maj 20011 826 inlägg
#4

erciz skrev:

Du måste naturligtvis skicka med den parametern på alla ställen du använder YEARWEEK().

Jag citerar mig själv.
I din kod har du glömt parametern på två ställen. Det är därför du får fel.

Medlem sedan jan. 200686 inlägg
#5

jag kopierade in fel kod....jag har testat med som du menar utan att lyckas

SELECT d.name_,i.key_,i.start_,i.end_
FROM jbpm_processdefinition d, jbpm_processinstance i
where (d.id_ = i.processdefinition_)
and (yearweek(i.end_,1) =yearweek(CURRENT_TIMESTAMP,1)
OR (yearweek(i.start_,1) = yearweek(CURRENT_TIMESTAMP,1) ) );

Medlem sedan jan. 200686 inlägg
#6

har ett annat problem också...
med följande kod får jag ett fel meddelande:Truncated incorrect time value: '7296:00:00'

select name_,d.id_,
sec_to_time(min(time_to_sec(TIMEDIFF(end_,start_)))) as minduration,
sec_to_time(max(time_to_sec(TIMEDIFF(end_,start_)))) as maxduration,
sec_to_time(avg(time_to_sec(TIMEDIFF(end_,start_))))as avgduration
from jbpm_processdefinition d, jbpm_processinstance i
where d.id_=i.processdefinition_ and end_ is not null;

jag tror att det beror på att det blir för många decimal punkter men jag vet inte hur jag ska fixa det!

Medlem sedan maj 20011 826 inlägg
#7

Det här borde lösa ditt problem i första inlägget. AND istället för OR.

SELECT d.name_,i.key_,i.start_,i.end_
FROM   jbpm_processdefinition d, jbpm_processinstance i
where (d.id_ = i.processdefinition_)
AND yearweek(i.end_,1) =yearweek(CURRENT_TIMESTAMP,1)
AND yearweek(i.start_,1) = yearweek(CURRENT_TIMESTAMP,1)

Det kan ju hända att du har andra problem med koden också. Men detta borde göra att du får ut data för en vecka.

Medlem sedan aug. 20039 340 inlägg
#8

Ang. ditt andra fel: sec_to_time (eller rättare sagt datatypen TIME) kan bara hantera upp till 838 timmar. 7296 är alltså på tok för långt. Prova att selecta max(TIMEDIFF(end_,start_)) i den frågan och se om du får samma fel.

Medlem sedan jan. 200686 inlägg
#9

i första frågan....jag vill absolute inte ha AND då det betyder att båda villkoren måste stämma. Jag har dock provat som du säger men det hjälper faktiskt inte.

i den andra frågan, så får jag fortf. samma fel när jag selecta med
select max(TIMEDIFF(end_,start_))

Men tack för att du försökt hjälpa mig ändå!

Medlem sedan maj 20011 826 inlägg
#10

swingman skrev:

i första frågan....jag vill absolute inte ha AND då det betyder att båda villkoren måste stämma. Jag har dock provat som du säger men det hjälper faktiskt inte.

i den andra frågan, så får jag fortf. samma fel när jag selecta med
select max(TIMEDIFF(end_,start_))

Men tack för att du försökt hjälpa mig ändå!

Men det är lite svårt att veta hur AND-villkoret ska vara när man inte vet hur tabellen ser ut.

295 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
155 ms — hämta tråd, inlägg och bilagor (db)
137 ms — ändringar (db)