Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Mengisi tanggal yang hilang berdasarkan grup

Anda dapat menggunakan data.table dari R . Dengan asumsi bahwa kolom 'waktu' adalah kelas 'Tanggal',

library(data.table)#v1.9.5+
DT1 <- setDT(df1)[, list(time=seq(min(time), max(time), by ='day')),
                    by =.(shop_id, item_id)]
setkeyv(df1, names(df1)[1:3])[DT1][is.na(value), value:=0]
#   shop_id item_id       time value
#1:     150       1 2015-07-10     3
#2:     150       1 2015-07-11     5
#3:     150       1 2015-07-12     0
#4:     150       1 2015-07-13     2
#5:     150       2 2015-07-10    15
#6:     150       2 2015-07-11     0
#7:     150       2 2015-07-12    12

Dalam versi devel, Anda juga dapat melakukan ini tanpa menyetel 'kunci'. Petunjuk untuk menginstal versi devel here

 df1[DT1, on =c('shop_id', 'item_id', 'time')][is.na(value), value:=0]
 #   shop_id item_id       time value
 #1:     150       1 2015-07-10     3
 #2:     150       1 2015-07-11     5
 #3:     150       1 2015-07-12     0
 #4:     150       1 2015-07-13     2
 #5:     150       2 2015-07-10    15
 #6:     150       2 2015-07-11     0
 #7:     150       2 2015-07-12    12

Atau seperti yang disarankan @Arun, opsi yang lebih efisien adalah

 DT1[, value := 0L][df1, value := i.value, on = c('shop_id', 'item_id', 'time')]
 DT1 


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana RANK() Bekerja di SQL Server

  2. SQL 'LIKE' query menggunakan '%' di mana kriteria pencarian berisi '%'

  3. grup sql dengan versus berbeda

  4. Bagaimana cara agar ekstensi SQLSRV berfungsi dengan PHP, karena MSSQL sudah usang?

  5. SQL Cara Memperbarui SUM kolom di atas grup di tabel yang sama