Sqlserver
 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

РЕДАКТИРАНЕ

Двоичен растеж в CTE вместо линеен. 2^100 дати трябва да дават разумен диапазон.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. индекси в sql сървър, вътрешна работа и структура на индексите

  2. Как да разширя стойностите, разделени със запетая, в отделни редове, използвайки SQL Server 2005?

  3. Изпълнение на COUNT SQL функция

  4. SQL заявка за изтриване на дублирани стойности във вътрешно съединение на 3 таблици с две различни бази данни

  5. Препоръчителни процесори Intel за натоварвания на SQL Server 2014