Jag har en användartabell där administratören kan lägga till nya samt inaktivera användare och jag har fått i uppdrag att plocka fram max antal aktiva användare per månad. Dvs om man skapar en ny användare innan man inaktiverar en annan ska det räknas som 2, men om man avslutar den gamla innan så räknas det bara som en. Hur sker själva inaktiveringen, etc.? Vilken information har du om användarena? Är det tidsstämplar för när kontot aktiverats och inaktiverats? Men snälla Johan, liiite snabbare får du väl vara?! Ja, jag har gjort ungefär som du beskriver, har SkapadDatum och InaktiveradDatum samt en flagga Aktiv på användaren. Jag skulle snarare säga att vi har följande fall: Ja, då är jag nog inne på rätt spår ändå... Hjälp med att räkna max antal aktiva poster inom en tidsperiod
Skulle med andra ord vilja hitta toppen på kurvan över antal användare inom en viss period.
Är det någon som vet om det finns något smart sätt att åstadkomma det i SQL (Jag kör MsSQL 2005 Express)?
/PatrikSv: Hjälp med att räkna max antal aktiva poster inom en tidsperiod
Via ändringar i tabellen, typ Active = False eller liknande?
Det i mitt tycke snyggaste är att sköta det helt och hållet via databasen; ha med en "tid inlagd" och en "tid inaktiverad", och sen göra en beräkning.
Annars kan jag i princip bara se ett sätt, och det är att via en trigger eller manuellt i koden uppdatera en annan tabell för att hålla reda på det.Sv: Hjälp med att räkna max antal aktiva poster inom en tidsperiod
/JohanSv:Hjälp med att räkna max antal aktiva poster inom en tidsperiod
;-)Sv:Hjälp med att räkna max antal aktiva poster inom en tidsperiod
Jag har identifierat tre olika fall när man söker på en period
1. Aktiva användare skapade före periodens start (ska alltid räknas med)
2. Aktiva användare skapade inom perioden (ska också alltid räknas med)
3. Inaktiva användare som inaktiverats inom perioden (ska bara räknas med om deras InaktiveradDatum är efter skapadDatum för användarna i 2.
Och när man summerar ovanstående borde man kunna hitta en tidpunkt när det var flest aktiva användare och det är den siffran jag vill få fram.
Jag har en lösning på gång med temptabeller och tre olika SQL-frågor enligt ovan, men undrar om det kan finnas någon enklare och snyggare lösning som jag förbisett? Sv: Hjälp med att räkna max antal aktiva poster inom en tidsperiod
1. Användare inte ändrats under perioden (inte registrerat sig i eller inaktiverats under perioden).
2. Användare registrerats under perioden
3. Användare inaktiverats inom perioden.
4. Både 2 och 3.
Nu borde det gå att göra något i stil med:
SELECT DT, M FROM ((SELECT registered_on as DT, 1 AS M FROM T WHERE registered_on >= 2008-01-01 AND registered_on < 2008-01-02)
UNION ALL
(SELECT inactivated_on as DT, -1 AS M FROM T WHERE inactivated_on >= 2008-01-01 AND inactivated_on < 2008-01-02)) ORDER BY DT, M
Så ser vi hur det förändras.
Typ
2008-01-01 +1
2008-01-01 +1
2008-01-02 -1
2008-01-02 +1
...
Problemet som kvarstår nu är att ackumulera värdet. Kan inte se något direkt sätt att göra det; kanske genom att hämta ut alla DT och göra någon slags join (låter jävligt slött dock). Där borde det dock vara en ganska smal sak att lösa det programmeringsmässigt.Sv:Hjälp med att räkna max antal aktiva poster inom en tidsperiod
Hade hoppats på ett svar av typen "Ja men då kan man använda SQL-funktionen bla bla..." :-)
Men då får jag jobba vidare på den lösning jag påbörjat.
Tack för hjälpen!
/Patrik