sql >> Database >  >> RDS >> Sqlserver

Krijg gebruikersnamen die dagelijks zijn ingelogd vanuit de database

DECLARE @from_date DATETIME, @to_date DATETIME

-- populate @from_date and @to_date based on reporting needs
-- possibly using MIN() and MAX() on your logged_in and logged_out fields

DECLARE
  @limit INT
SELECT
  @limit = DATEDIFF(DAY, @from_date, @to_date)
;
WITH
  calendar AS
(
  SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @from_date), 0) AS date, 1 AS inc_a, 2 AS inc_b
UNION ALL
  SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @from_date) + inc_a, 0), inc_a + inc_a + 1, inc_a + inc_a + 2 FROM calendar WHERE inc_a <= @limit
UNION ALL
  SELECT DATEADD(DAY, DATEDIFF(DAY, 0, @from_date) + inc_b, 0), inc_b + inc_b + 1, inc_b + inc_b + 2 FROM calendar WHERE inc_b <= @limit
)

SELECT
  calendar.date,
  your_table.username
FROM
  your_table
INNER JOIN
  calendar
    ON  calendar.date >= DATEADD(DAY, DATEDIFF(DAY, 0, your_table.logged_id), 0)
    AND calendar.date <  your_table.logged_out

BEWERKEN

Binaire groei in CTE in plaats van lineair. 2^100 datums zouden een redelijk bereik moeten geven.



  1. Vitess en MySQL uitvoeren met ClusterControl

  2. Hoe kan ik een query schrijven om individuele wijzigingen uit momentopnamen van gegevens te extraheren?

  3. OpenShift-app kan geen verbinding maken met MySQL:JDBCConnectionException:Kon geen verbinding openen

  4. MYSQL Invoegen Verzendknop PHP