我有两个型号A和B.所有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每家面包店最新蛋糕的查询.
我正在尝试从表中获取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.
我有一张传感器数据表.每行都有一个传感器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子句中或者在聚合中使用".
解决这个问题的正确方法是什么?
我在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)
但我还想显示与每个组Info的Score列的最大值相关联的列.我不知道该怎么做.我想要的输出是:
Group.1 x y
1 1 3 c
2 2 4 d
Run Code Online (Sandbox Code Playgroud)
任何提示?
执行此代码时遇到问题:
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子句或命令可以比上面的查询执行得更快?
提前致谢.
假设我有一个包含一些棒球运动员的数据表:
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%,这表明它可能不是惯用语.
假设我有下一个数据
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)
我怎么能管理呢?
我的数据看起来像这样:
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) 我的数据库中有以下数据:
|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) 我的表看起来像这样:
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 ×7
date ×2
mysql ×2
postgresql ×2
r ×2
aggregate ×1
data.table ×1
django ×1
join ×1
optimization ×1
plyr ×1
python ×1