我有一个看起来像这样的表:
+----------+----------+-------------+
| id | name | date |
+----------+----------+-------------+
| 1 | John | 2018-08-21 |
+----------+----------+-------------+
| 2 | James | 2018-08-22 |
+----------+----------+-------------+
| 3 | John | 2018-08-22 |
+----------+----------+-------------+
| 4 | Paul | 2018-08-23 |
+----------+----------+-------------+
我正在寻找一个查询,当您选择 id = 1
时,它将返回:
+----------+----------+-------------+
| id | name | date |
+----------+----------+-------------+
| 1 | John | 2018-08-21 |
+----------+----------+-------------+
| 3 | John | 2018-08-22 |
+----------+----------+-------------+
但是当您选择 id = 2
时,您会得到:
+----------+----------+-------------+
| id | name | date |
+----------+----------+-------------+
| 2 | James | 2018-08-22 |
+----------+----------+-------------+
所以换句话说,查询应该通过 id
返回匹配的行和名称相同的下一行。
我会在 sqlalchemy
中完成此操作。感谢所有帮助。
最佳答案
使用关系数据库就是理解没有下一行,没有预设顺序。您需要通过排序请求特定顺序,然后根据需要按该顺序获取尽可能多的记录。
在这种情况下,您使用例如.filter(the_table.c.name == "John")
,然后是 .order_by("id", "name")
,然后是 .limit(2 )
。如果您获取了两行,则有两条记录符合您的约束条件。可以没有记录,也可以只有一条记录。
如果您有 John 的多个记录集,并且想要一个特定的子序列,事情就会变得更加棘手。为此,您可以为日期添加一个条件,例如 the_table.c.id >= certain_id
,或类似的条件。
一般来说,您的数据模型缺少一种将多个记录链接成一个序列的明确方法。您没有“序列 ID”或“以前的记录 ID”或类似的东西可以帮助查看多个记录的相关性。也许您可以为此使用时间戳列,如果它适合您的问题;很可能不会。
关于Python SQLAlchemy 获取匹配行和列相同的下一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52263573/