# Testing setting the min of something to a value

set.seed(17)
minDate <- as.Date("2013-06-01")
maxDate <- as.Date("2013-11-17")
N.rows <- 100
N.uids <- 3
N.tids <- 5
N.dates <- N.rows / 2
nc.uids <- 3
nc.tids <- 6
L.u <- c(LETTERS, 0:9)
L.t <- c(letters, 0:9)
uids <- replicate(N.uids, pasteC(c(sample(LETTERS[1:5], 1), sample(L.u, nc.uids-1, TRUE))))
tids <- replicate(N.ids, pasteC(c(sample(0:9, 1), sample(L.u, nc.tids-1, TRUE))))

uids <- sprintf("Usr_%02d", seq.int(N.uids))
tids <- sprintf("Trk_%02d", seq.int(N.tids))

dates <- seq.Date(from=minDate, to=maxDate, by=1)
dates <- sample(dates, N.rows, N.rows > length(dates))
# mess up the probabilities

DB.raw <- data.table(userid=sample(uids, N.rows, TRUE), trackid=sample(tids, N.rows, TRUE), download_date=dates)
DB.raw[, .N, by=list(userid, trackid)][order(N)]

DB.raw[]


s.t( DB.raw[, usrFirstTimeOnTrack  := download_date==min(download_date), by=list(userid, trackid)], "Calc User First, by trackid")


setkey(DB.raw, userid, download_date)
DB.raw[, DB.raw[.I[[1]], usrFirstTimeOnTrack := TRUE], by=list(userid, trackid)]
DB.raw[, .I[1], by=list(userid, trackid)]
s.t( DB.raw[, usrFirstTimeOnTrack  := download_date==min(download_date), by=list(userid, trackid)], "Calc User First, by trackid")
