Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 获取两个日期之间每行的最大值?_Sql_R_Sqlite_Sqldf - Fatal编程技术网

Sql 获取两个日期之间每行的最大值?

Sql 获取两个日期之间每行的最大值?,sql,r,sqlite,sqldf,Sql,R,Sqlite,Sqldf,在这里学习sql,我遇到了一个挑战 我有下表: tbl <- data.frame( id_name = c("a", "a", "b", "c", "d", "f", "b", "c", "d", "f"), value = c(1, -1, 1, 1, 1, 1, -1, -1, -1, -1), score = c(1, 0, 1, 2, 3, 4, 3, 2, 1, 0), date = as.Date(c("2001-1-1", "2002-1-1", "

在这里学习sql,我遇到了一个挑战

我有下表:

tbl <- data.frame(
   id_name = c("a", "a", "b", "c", "d", "f", "b", "c", "d", "f"),
   value = c(1, -1, 1, 1, 1, 1, -1, -1, -1, -1),
   score = c(1, 0, 1, 2, 3, 4, 3, 2, 1, 0),
   date = as.Date(c("2001-1-1", "2002-1-1", "2003-1-1", "2005-1-1", 
                    "2005-1-1", "2007-1-1", "2008-1-1", "2010-1-1", 
                    "2011-1-1", "2012-1-1"), "%Y-%m-%d")
                   )


+---------+-------+-------+-----------+
| id_name | value | score |   date    |
+---------+-------+-------+-----------+
| a       |     1 |     1 |  2001-1-1 |
|  a      |    -1 |     0 |  2002-1-1 |
|  b      |     1 |     1 |  2003-1-1 |
|  c      |     1 |     2 |  2005-1-1 |
|  d      |     1 |     3 |  2005-1-1 |
|  f      |     1 |     4 |  2007-1-1 |
|  b      |    -1 |     3 |  2008-1-1 |
|  c      |    -1 |     2 |  2010-1-1 |
|  d      |    -1 |     1 |  2011-1-1 |
|  f      |    -1 |     0 |  2012-1-1 |
+---------+-------+-------+-----------+
这就是我到目前为止所做的

   sqldf("
  SELECT 
    id_name,
    date,
    score
  FROM
    tbl As d
  WHERE
    score = (
                        SELECT MAX(score)
                        FROM tbl As b
                        WHERE 
                          date >= (
                                        SELECT MIN(date)
                                        FROM tbl
                                        WHERE id_name = b.id_name
                          ) AND
                          date <= (
                                        SELECT MAX(date)
                                        FROM tbl
                                        WHERE id_name = b.id_name
                          )
    )
  ")
问题是,它返回的行具有全局最大值,而与当前行值无关


谢谢

我认为WHERE子句中的相关子查询适合这里的情况:

SELECT id_name, date
FROM tbl as t1
WHERE score = (SELECT max(score) FROM tbl WHERE id_name = t1.id_name)

谢谢你的回复。它让我更靠近了,但不太接近。例如,对于id_name='b',它应该返回'2007-1-1',因为这是得分最高的时候,并且介于id_name='b'的第一个和最后一个日期'2003-01-01'和'2008-01-01'之间,我更新了上面的问题和我的尝试。如果还不清楚,请告诉我。谢谢。那么您正在查找给定id_名称在两个日期之间出现的任何记录的最大分数的日期?您的id_名称是否只有1条记录或多于2条记录?另外,请澄清这是一个sqlite数据库?我在标签中看到了这一点,但我只是想确认一下,因为人们经常标记错误的RDBMS,如果他们的问题和正在使用的RDBMS在这里会起到很大的作用,因为LAG和其他窗口函数应该使这一点非常可行。是的,你的第一个问题,我在R中使用sqldf包做这件事,所以它是sqlite!
SELECT id_name, date
FROM tbl as t1
WHERE score = (SELECT max(score) FROM tbl WHERE id_name = t1.id_name)