标签: greatest-n-per-group

Django查询从不同类别获取最新对象

我有两个型号AB.所有B对象都有一个对象的外键A.给定一组A对象,无论如何都要使用ORM来获取B包含为每个A对象创建的最新对象的一组对象

这是一个简化的例子:

class Bakery(models.Model):
    town = models.CharField(max_length=255)

class Cake(models.Model):
    bakery = models.ForeignKey(Bakery, on_delete=models.CASCADE)
    baked_at = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

所以我正在寻找一个可以返回美国Anytown每家面包店最新蛋糕的查询.

python django django-queryset greatest-n-per-group

72
推荐指数
4
解决办法
2万
查看次数

SQL查询以获取给定键的每个实例的最新行

我正在尝试从表中获取ip,用户和最近的时间戳,该表可能包含用户的当前ip和一个或多个先前的ips.我想为每个用户提供一行,其中包含最新的ip和相关的时间戳.所以如果一个表看起来像这样:

username      |  ip      |  time_stamp  
--------------|----------|--------------  
ted           | 1.2.3.4  | 10  
jerry         | 5.6.6.7  | 12  
ted           | 8.8.8.8  | 30  
Run Code Online (Sandbox Code Playgroud)

我希望查询的输出是:

jerry    |  5.6.6.7   |  12
ted      |  8.8.8.8   |  30  
Run Code Online (Sandbox Code Playgroud)

我可以在单个SQL查询中执行此操作吗?如果重要,DBMS就是Postgresql.

sql postgresql greatest-n-per-group

64
推荐指数
3
解决办法
14万
查看次数

如何为每个键值选择具有最新时间戳的行?

我有一张传感器数据表.每行都有一个传感器ID,一个时间戳和其他字段.我想为每个传感器选择一个具有最新时间戳的行,包括一些其他字段.

我认为解决方案是按传感器ID进行分组,然后按max(timestamp)顺序排序,如下所示:

SELECT sensorID,timestamp,sensorField1,sensorField2 
FROM sensorTable 
GROUP BY sensorID 
ORDER BY max(timestamp);
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误,说"sensorField1必须出现在group by子句中或者在聚合中使用".

解决这个问题的正确方法是什么?

sql greatest-n-per-group

64
推荐指数
6
解决办法
17万
查看次数

聚合给定列上的数据框并显示另一列

我在R中有以下形式的数据帧:

> head(data)
  Group Score Info
1     1     1    a
2     1     2    b
3     1     3    c
4     2     4    d
5     2     3    e
6     2     1    f
Run Code Online (Sandbox Code Playgroud)

我想在Score使用该max函数的列之后聚合它

> aggregate(data$Score, list(data$Group), max)

  Group.1         x
1       1         3
2       2         4
Run Code Online (Sandbox Code Playgroud)

但我还想显示与每个组InfoScore列的最大值相关联的列.我不知道该怎么做.我想要的输出是:

  Group.1         x        y
1       1         3        c
2       2         4        d
Run Code Online (Sandbox Code Playgroud)

任何提示?

aggregate r plyr greatest-n-per-group

54
推荐指数
6
解决办法
11万
查看次数

GROUP BY具有MAX日期

执行此代码时遇到问题:

SELECT * FROM tblpm n 
WHERE date_updated=(SELECT MAX(date_updated) 
FROM tblpm GROUP BY control_number 
HAVING control_number=n.control_number)
Run Code Online (Sandbox Code Playgroud)

基本上,我想返回每个控制号的最新日期.上面的查询返回正确的输出,但需要37秒.在输出显示之前.

是否还有其他sql子句或命令可以比上面的查询执行得更快?

提前致谢.

mysql sql optimization greatest-n-per-group

53
推荐指数
2
解决办法
12万
查看次数

使用data.table按组进行子集化

假设我有一个包含一些棒球运动员的数据表:

library(plyr)
library(data.table)

bdt <- as.data.table(baseball)
Run Code Online (Sandbox Code Playgroud)

对于每个玩家(由id给出),我想找到与他们玩最多游戏的年份相对应的行.这在plyr中很简单:

ddply(baseball, "id", subset, g == max(g))
Run Code Online (Sandbox Code Playgroud)

data.table的等效代码是什么?

我试过了:

setkey(bdt, "id") 
bdt[g == max(g)]  # only one row
bdt[g == max(g), by = id]  # Error: 'by' or 'keyby' is supplied but not j
bdt[, .SD[g == max(g)]] # only one row
Run Code Online (Sandbox Code Playgroud)

这有效:

bdt[, .SD[g == max(g)], by = id] 
Run Code Online (Sandbox Code Playgroud)

但它比plyr快30%,这表明它可能不是惯用语.

r greatest-n-per-group data.table

51
推荐指数
1
解决办法
2万
查看次数

Postgresql提取每个id的最后一行

假设我有下一个数据

  id    date          another_info
  1     2014-02-01         kjkj
  1     2014-03-11         ajskj
  1     2014-05-13         kgfd
  2     2014-02-01         SADA
  3     2014-02-01         sfdg
  3     2014-06-12         fdsA
Run Code Online (Sandbox Code Playgroud)

我想为每个id提取最后的信息:

  id    date          another_info
  1     2014-05-13         kgfd
  2     2014-02-01         SADA
  3     2014-06-12         fdsA
Run Code Online (Sandbox Code Playgroud)

我怎么能管理呢?

sql postgresql greatest-n-per-group

51
推荐指数
3
解决办法
2万
查看次数

如何将一个表中的最新行连接到另一个表?

我的数据看起来像这样:

entities
id         name
1          Apple
2          Orange
3          Banana
Run Code Online (Sandbox Code Playgroud)

流程将定期运行并为每个实体提供分数.该过程生成数据并将其添加到分数表中,如下所示:

scores 
id  entity_id    score   date_added
1    1            10       1/2/09
2    2            10       1/2/09
3    1            15       1/3/09
4    2            10       1/03/09
5    1            15       1/4/09
6    2            15       1/4/09
7    3            22       1/4/09
Run Code Online (Sandbox Code Playgroud)

我希望能够选择所有实体以及每个实体的最新记录得分,从而产生如下数据:

entities
id name     score  date_added
1  Apple     15     1/4/09
2  Orange    15     1/4/09
3  Banana    15     1/4/09
Run Code Online (Sandbox Code Playgroud)

我可以使用此查询获取单个实体的数据:

SELECT entities.*, 
       scores.score, 
       scores.date_added 
FROM entities

INNER  JOIN scores
ON entities.id = scores.entity_id

WHERE entities.id = ? …
Run Code Online (Sandbox Code Playgroud)

sql join date greatest-n-per-group

50
推荐指数
3
解决办法
4万
查看次数

从分组的MySQL数据中获取最新日期

我的数据库中有以下数据:

|NO | model | date     | 
+---+-------+----------+
|1  | bee   |2011-12-01|
|2  | bee   |2011-12-05|
|3  | bee   |2011-12-12|
|4  | tar   |2011-12-13|
Run Code Online (Sandbox Code Playgroud)

我想获得每个模型组的最新日期:

| model | date     | 
+-------+----------+
| bee   |2011-12-12|
| tar   |2011-12-13|
Run Code Online (Sandbox Code Playgroud)

我试过了:

SELECT model, date 
FROM doc
WHERE date ........????? //what is the next?
GROUP BY model
Run Code Online (Sandbox Code Playgroud)

mysql sql date greatest-n-per-group

49
推荐指数
3
解决办法
9万
查看次数

从行中包含最大日期的表中选择信息

我的表看起来像这样:

group    date      cash  checks
  1    1/1/2013     0      0
  2    1/1/2013     0      800
  1    1/3/2013     0      700
  3    1/1/2013     0      600
  1    1/2/2013     0      400
  3    1/5/2013     0      200
Run Code Online (Sandbox Code Playgroud)

- 不需要现金只是证明该表中有更多信息

我想得到每个唯一的组,其中日期是最大值,检查大于0.所以返回看起来像这样:

group    date     checks
  2    1/1/2013    800
  1    1/3/2013    700
  3    1/5/2013    200
Run Code Online (Sandbox Code Playgroud)

尝试代码:

SELECT group,MAX(date),checks
    FROM table
    WHERE checks>0
    GROUP BY group
    ORDER BY group DESC
Run Code Online (Sandbox Code Playgroud)

问题虽然它给了我所有的日期和检查,而不仅仅是最大日期行.

使用ms sql server 2005

sql sql-server-2005 greatest-n-per-group

49
推荐指数
4
解决办法
30万
查看次数