作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我对SQL有点生锈,并且在查询中遇到了一个小问题。在我们的应用程序中,我们有两个与此表有关的表。有条目,每个条目有N个步骤。
我们正在尝试优化查询,因此,我们一直在询问上次检查后更新的条目,而不是一直询问所有条目。可能有很多步骤,因此该查询仅应返回条目和一些步骤摘要数据,并且如果需要,我们可以单独查询步骤。
输入开始时间和更新时间分别从第一个和最近的处理步骤时间计算得出。我们还必须将进入状态分组在一起。
这是我们在python中构建时的查询,因为它似乎更易于阅读:
statement = 'SELECT e.serial_number, ' + \
'e.description, ' + \
'min(p.start_time) begin_time, ' + \
'group_concat(p.status) status, ' + \
'max(p.last_updated) last_updated, ' + \
'FROM entries e ' + \
'LEFT OUTER JOIN process_steps p ON e.serial_number = p.serial_number ' + \
# if the user provides a "since" date, only return entries updated after
# that date
if since is not None:
statement += ' WHERE last_updated > "{0}"'.format(since)
statement += ' GROUP BY e.serial_number'
WHERE
子句,它也会过滤流程步骤。因此,例如,如果我们有两种情况出现这种情况:
Entry: 123 foo
Steps:
1. start time 10:00, updated 10:30, status completed
2. start time 11:00, updated 11:30, status completed
3. start time 12:00, updated 12:30, status failed
4. start time 13:00, updated 13:30, status in_progress
Entry: 321 bar
Steps:
1. start time 01:00, updated 01:30, status completed
2. start time 02:00, updated 02:30, status completed
321, bar, 01:00, "completed,completed", 02:30
123, foo, 10:00, "completed,completed,failed,in_progress", 13:30
123, foo, 12:00, "failed,in_progress", 13:30
123, foo, 10:00, "completed,completed,failed,in_progress", 13:30
last_updated
值过滤最终结果,但是它目前也在过滤联接结果,因为
begin_time
,
last_updated
和
status
值是用部分步骤。任何想法如何修改查询以获取我想要的内容?
max(p.last_updated) last_updated
更改为
max(p.last_updated) max_last_updated
,并且也将
WHERE
子句也更改为使用
max_last_updated
,则会得到
OperationalError: misuse of aggregate: max()
。我们还尝试在其中添加
AS
语句,没有区别。
最佳答案
创建一个子查询,该子查询首先选择更新的进程:
SELECT whatever you need FROM entries e
LEFT OUTER JOIN process_steps p ON e.serial_number = p.serial_number
WHERE e.serial_number in (SELECT distinct serial_number from process_steps
WHERE last_updated > "date here")
GROUP BY e.serial_number
关于sql - SQLite查询WHERE与OUTER JOIN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55654458/
我是一名优秀的程序员,十分优秀!