gpt4 book ai didi

python - WHERE 子句中的子查询

转载 作者:行者123 更新时间:2023-11-30 23:00:21 25 4
gpt4 key购买 nike

我目前正致力于使用 sqlalchemy 运行以下查询。

SELECT * 
FROM
qsreport_test.JiraFehlerFreigabeReleaseTestData a
WHERE a.dtime = (
SELECT
max(dtime)
FROM
qsreport_test.JiraFehlerFreigabeReleaseTestData b
WHERE
b.key=a.key
AND
b.testplanname=a.testplanname
AND
b.priority=a.priority
)
GROUP BY
a.testplanname, a.priority

我在这里搜索并找到了
SQLAlchemy - subquery in a WHERE clause
我也知道
http://docs.sqlalchemy.org/en/rel_0_9/orm/tutorial.html#using-subqueries
但我的查询仍然无法正常工作。

这是我的两个尝试。第一个可以执行,但不会给我与手动执行查询相同的结果。第二个可以执行并且现在正在运行(之前缺少括号)。

尝试 1:

subq = session.query(JiraFehlerFreigabeReleaseTestData.key, JiraFehlerFreigabeReleaseTestData.testplanname, JiraFehlerFreigabeReleaseTestData.priority, func.max(JiraFehlerFreigabeReleaseTestData.dtime).label('max_dtime')).filter(JiraFehlerFreigabeReleaseTestData.key == key).filter(JiraFehlerFreigabeReleaseTestData.dtime <= dtime).subquery()
res = session.query(JiraFehlerFreigabeReleaseTestData).filter(and_(JiraFehlerFreigabeReleaseTestData.key == subq.c.key, JiraFehlerFreigabeReleaseTestData.testplanname == subq.c.testplanname, JiraFehlerFreigabeReleaseTestData.priority == subq.c.priority, JiraFehlerFreigabeReleaseTestData.dtime == subq.c.max_dtime)).group_by(JiraFehlerFreigabeReleaseTestData.testplanname).order_by(JiraFehlerFreigabeReleaseTestData.dtime.desc()).all()

尝试 2:

b = aliased(JiraFehlerFreigabeReleaseTestData, name='b')
res = session.query(JiraFehlerFreigabeReleaseTestData).filter(JiraFehlerFreigabeReleaseTestData.dtime == (session.query(func.max(b.dtime)).filter(b.key == JiraFehlerFreigabeReleaseTestData.key).filter(b.testplanname == JiraFehlerFreigabeReleaseTestData.testplanname).filter(b.priority == JiraFehlerFreigabeReleaseTestData.priority))).group_by(JiraFehlerFreigabeReleaseTestData.testplanname,JiraFehlerFreigabeReleaseTestData.priority).order_by(JiraFehlerFreigabeReleaseTestData.dtime.desc()).all()

请告诉我我做错了什么。我的问题是我不完全明白如何在子查询中引用主查询的表。特别是因为两个表在两个查询中是相同的。也许有什么可以将我的手动 sql 查询转换为 sqlalchemy orm 语法?

编辑:我的第二个版本正在运行。我只是错过了一个括号。我修复了上面的代码。但为什么我的第一次尝试给出了不同的结果?

最佳答案

我还没有使用过 SQLAlchemy,但如果您不使用子查询,也许您可​​以解决您的问题。看看下面的查询。未测试您的免费翻译;)

    SELECT a.* 
FROM qsreport_test.JiraFehlerFreigabeReleaseTestData a
INNER JOIN qsreport_test.JiraFehlerFreigabeReleaseTestData b
ON b.key = a.key
AND b.testplanname=a.testplanname
AND b.priority=a.priority
GROUP BY a.testplanname, a.priority
HAVING a.dtime = max(b.dtime)

关于python - WHERE 子句中的子查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24339372/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com