sql >> データベース >  >> RDS >> Sqlserver

データベースから毎日ログインしているユーザー名を取得する

    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
    

    編集

    Linear ではなく CTE でのバイナリ成長。 2^100 の日付で妥当な範囲が得られます。



    1. OracleとPagination

    2. mysql SQL:特定のアイテムが最初になり、次に残りのアイテムを並べ替えます

    3. SQL Serverで「無効なオブジェクト名」を解決するには?

    4. SQLステートメントでグループ化されていない列を取得する方法(MySQLと同様)