Avatar billede jes-eu Nybegynder
04. februar 2005 - 15:01 Der er 6 kommentarer og
2 løsninger

Advanceret dato udtræk

Hejsa Allesammen....

Jeg håber virkelig der er nogen som kan hjælpe. Jeg har en MS Access Database med et dato felt, feltet bliver automatisk opdateret med dags dato når jeg tilføjer poster i databasen. Problemmet eller udfordringen består i at jeg skal lave et udtræk, der har følgende funktion:

Eks.: Alle poster tilføjet i uge (x) skal være synlige fra uge (x+1) om mandagen.

Derudover skal jeg have en funkrion der gør det modsatte, altså viser alle som ikke er tilføjet i ugen før.

Jeg har tidligere skrevet og endte med det her, men det synes ikke at virke, den gang så det således ud:

functionen:
<%tmpDate = Date()
    Function weekNr (dtmDate)  ' Week Of Year
        weekNr = DatePart("ww", dtmDate, vbMonday, vbFirstFourDays)
            If weekNr > 52 Then                       
                If DatePart("ww", dtmDate + 7 , vbMonday, vbFirstFourDays) = 2 Then weekNr = 1
            End If
    End Function

Udtrækket:
<%call opentbl("SELECT * FROM PartnerSearch WHERE AssignedTo = "&menu_id&" AND datePart('w',oprettet,2,2) = datePart('w',date()-7,2,2) AND Year(oprettet) = Year(date()-7)", rss)%>Håber I kan hjælpe, jeg giver så mange point som jeg kan da det virkelig er ved at være irriterende ;)
Avatar billede lorentsnv Nybegynder
04. februar 2005 - 15:45 #1
Et udgangspunkt kunne være følgende SQL:
SELECT *
FROM PartnerSearch
WHERE (((DatePart("ww",[DatofeltIDatabase]))=DatePart("ww",Date())-1));

Så skal der justeres lidt omkring årsskiftet, og DatePart funktionen skal nok have et par ekstra parametre på, for at få den til at bruge de ugenumre vi bruger i DK. Men det er måske de parametre du har alerede, hvor du har 2,2 til sidst i din DatePart?

Jeg checker lidt mere, og vender tilbage.
Avatar billede jes-eu Nybegynder
04. februar 2005 - 15:48 #2
Lyder bare super. Det er vigtigt at alle som er tilføjet ugen forinden bliver viset mandagen ugen efter. Således at det ikke kun er dem der tilføjet mandag bliver vist mandag, tirsdag bliver vist tirsdag mv.
Avatar billede lorentsnv Nybegynder
04. februar 2005 - 15:50 #3
Ovenstående SQL skal selvølgelig tilpasses dit behov, men pointet er at du i din WHERE-sætning kan omregne datoen i databasen til ugenummer, og teste den op mod ugenummer baseret på datens dato (DatePart("ww",Date())-1)) giver ugenummer i sidste uge).

Er det rigtig forstået at det er sidste uge du ønsker at have fat i?

I den modsatte forespørgsel, hvor du ikke vil have med fra sidste uge, kan du bare spørge på ugenummre ulig sidste uge;
WHERE (((DatePart("ww",[DatofeltIDatabase]))<>DatePart("ww",Date())-1));

Du har eventuelt også behov for at sortere på år. Jeg vender tilbage....
Avatar billede jes-eu Nybegynder
04. februar 2005 - 16:02 #4
Yes, f.eks.: poster tilføjer i uge 4 skal først være synlige on mandagen i uge 5.
Avatar billede lorentsnv Nybegynder
04. februar 2005 - 16:12 #5
Select sætningen som jeg har vist, viser hele forrige uge, så i hele uge 5 viser den hele uge 4.

Jeg checket med dine parametre i DateDiff funktonen (2,2) og de skal være med for å få rigtig ugenummer i DK:
SELECT *
FROM PartnerSearch
WHERE DatePart("ww",[DatofeltIDatabase],2,2)=DatePart("ww",Date(),2,2)-1;

Jeg mangler fortsat en håndtering af årsskifte. Enten kan man lave noget ASP der checker ugenummer, og hvis man er i ugenummer 1, bruges en speciel SQL der henter sidste uge i året før, ellers bruges den generelle SQL der henter forrige uge.

Jeg har testet lidt med at lave en generel SQL som kan klare det, men har ikke helt løsningen endnu. En måde at gøre det på, er at kombinere ugenummer og år (YearUge: DatePart("yyyy",[Dato],2,2) & FormatNumber(DatePart("ww",[Dato],2,2),"00")), men her har jeg to udfordringer som skal løses;
1) Ugenummer skal formateres så ugenummer lavere end uge 10 får et 0 forran
2) Jeg skal have fat i årstallet for ugenummeret, og ikke for datoen. De to første dage i år 2005 hører til uge 53, og variabelen jeg skal checke på skal så være 200453 og ikke 200553.
Avatar billede lorentsnv Nybegynder
04. februar 2005 - 16:52 #6
Jeg er ikke helt kommet frem til en løsning endnu.
forsøgte med følgende, men den giver ikke helt hvad jeg ønsker:
YearUge: CStr((DatePart("yyyy",[Dato],2,2)-IIf(DatePart("m",[Dato])=1 And DatePart("ww",[Dato])>5,1,0))*100+FormatNumber(DatePart("ww",[Dato],2,2),"00"))

Hvis du ikke får en løsning inden, vil jeg ofrsøge at kigge på det en gang i weekenden igen.
Avatar billede eagleeye Praktikant
04. februar 2005 - 18:59 #7
En anden metode uden brug af ugenr.

Find datoen på mandag i denne uge (X+1) og så trække 7 dage fra så har du start dato for de poster som skal vises, slut datoen er mandag i denne uge.

Eks på koden:

<%
mandagDenneUge=DateAdd("d",-(weekday(date,2)-1),date)
mandagSidsteUge=DateAdd("d",-7,mandagDenneUge)

'Formater datoen til yyyy-mm-dd virker altid med Access hvis kolonnen er af typen date/time
mandagDenneUge = Year(mandagDenneUge) & "-" & Month(mandagDenneUge) & "-" & day(mandagDenneUge)
mandagSidsteUge = Year(mandagSidsteUge) & "-" & Month(mandagSidsteUge) & "-" & day(mandagSidsteUge)

SQL = "select * from tbl where dato >= #" &mandagSidsteUge& "# and dato < #" & mandagDenneUge & "#"


For den anden som skal vise alt der ikke er i uge X så er det bare at vende tegene om >= -> < og < -> >= samt skift and ud med or:

SQL = "select * from tbl where dato < #" &mandagSidsteUge& "# or dato >= #" & mandagDenneUge & "#"
Avatar billede jes-eu Nybegynder
07. februar 2005 - 10:19 #8
Tak for begge løsninger, jeg endte med at anvende eagleeye, men I deler pointene ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester