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

Przeprowadź pętlę przez każdą wartość do seq num

Masz na myśli to?

with myData as
(
select ID,
row_Number() over (partition by Id order by id, StartDate) as SeqNum,
min(startdate) over (partition by Id) as minDate,
startDate, endDate
from myTable
)
select id, seqNum, startDate, endDate, dateadd(day, seqNum*29, minDate) as newDate
from myData;

Albo to:

with myData as
(
select ID,
row_Number() over (partition by Id order by id, StartDate) as SeqNum,
min(startdate) over (partition by Id) as minDate, 
max(endDate) over (partition by Id)as maxDate,
startDate, endDate
from myTable
)
select id, seqNum, startDate, endDate, 
 case 
 when maxDate < dateadd(day, seqNum*29, minDate)
 then maxDate 
 else dateadd(day, seqNum*29, minDate) end as newDate
from myData;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Przekroczono poziom zagnieżdżenia wyzwalacza?

  2. Jak zwrócić ciąg w odwrotnej kolejności za pomocą SQL Server – REVERSE()

  3. Jak przekazać NULL lub puste ciągi do parametru wejściowego procedury składowanej z ADO i VB?

  4. Jak sprawdzić, czy ciąg jest unikalnym identyfikatorem?

  5. Uzyskaj podstawowe kolumny widoku na podstawie jego zestawu wyników