Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Scalić sąsiednie wiersze w SQL?

W tym artykule znajdziesz kilka możliwych rozwiązań Twojego pytania

http://www.sqlmag.com/blog/puzzled-by-t-sql-blog-15/tsql/solutions-to-packing-date-and-time-intervals-puzzle-136851

Ten wydaje się najprostszy:

WITH StartTimes AS
(
  SELECT DISTINCT username, starttime
  FROM dbo.Sessions AS S1
  WHERE NOT EXISTS
    (SELECT * FROM dbo.Sessions AS S2
     WHERE S2.username = S1.username
       AND S2.starttime < S1.starttime
       AND S2.endtime >= S1.starttime)
),
EndTimes AS
(
  SELECT DISTINCT username, endtime
  FROM dbo.Sessions AS S1
  WHERE NOT EXISTS
    (SELECT * FROM dbo.Sessions AS S2
     WHERE S2.username = S1.username
       AND S2.endtime > S1.endtime
       AND S2.starttime <= S1.endtime)
)
SELECT username, starttime,
  (SELECT MIN(endtime) FROM EndTimes AS E
   WHERE E.username = S.username
     AND endtime >= starttime) AS endtime
FROM StartTimes AS S;


  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 2005 — wyszukiwanie tekstu w procedurach składowanych (nie cały tekst jest przeszukiwany)

  2. Kolumna GUID programu SQL Server 2008 zawiera same zera

  3. Znaki UTF-8 są zapisywane jako ?? podczas wstawiania, ale zapisuje się poprawnie podczas aktualizacji

  4. Entity Framework:istnieje już otwarty DataReader skojarzony z tym poleceniem

  5. Nie można znaleźć zestawu „Microsoft.SqlServer.Types” w wersji 10 lub nowszej