0

我有一个表,其中主要包含我感兴趣的 3 列old_item_idnew_item_iddate_of_change。我想遍历序列并想找出最新id的一些项目 ID。下面的示例数据:

old_item_id new_item_id date_of_change
     1            2        2015-01-01
     2            5        2015-01-02
     5            12       2015-10-01
     4            5        2015-01-02
     6            7        2015-02-02

因此,如果我想要项目 1、4、6 和 8 的最新 ID;在这种情况下,我应该得到以下输出:

item_id    latest_item_id 
     1            12               
     4            12        
     6            7
     8            8

因为 1 和 4 可以追溯到 12。项目 ID 6 更改为 7,项目 ID 8 从未更改。

目前,我通过在另一个脚本的 while 循环中反复点击表格来做到这一点。但是,我正在寻找在单个数据库命中中执行此操作的查询。

4

1 回答 1

2

这可以通过 package 来完成igraph,但它是一种图论解决方案,而不是数据库解决方案。

library(igraph)

g <- graph_from_data_frame(dat)
res <- lapply(V(g), function(i) dfs(g, i, unreachable = FALSE)$order)
res <- lapply(res, function(e) e[!is.na(e)])
sapply(res, function(e) names(e)[length(e)])
#   1    2    5    4    6   12    7 
#"12" "12" "12" "12"  "7" "12"  "7"

请注意,如果需要,您可以将最终结果强制归类integer

数据。

dat <-
structure(list(old_item_id = c(1L, 2L, 5L, 4L, 6L), new_item_id = c(2L, 
5L, 12L, 5L, 7L), date_of_change = structure(c(16436, 16437, 
16709, 16437, 16468), class = "Date")), row.names = c(NA, -5L
), class = "data.frame")
于 2018-10-18T09:59:44.980 回答