这似乎应该相当简单,但我在寻找一个适合我的解决方案时遇到了绊脚石.
我有一个member_contracts表具有以下(简化)结构.
MemberID | ContractID | StartDate | End Date |
------------------------------------------------
1 1 2/1/2002 2/1/2003
2 2 3/1/2002 3/1/2003
3 3 4/1/2002 4/1/2003
1 4 2/1/2002 2/1/2004
2 5 3/1/2003 2/1/2004
3 6 4/1/2003 2/1/2004
Run Code Online (Sandbox Code Playgroud)
我正在尝试创建一个查询,从该表中选择最近的合同.这是这个小例子的以下输出:
MemberID | ContractID | StartDate | End Date |
------------------------------------------------
1 4 2/1/2002 2/1/2004
2 5 3/1/2003 2/1/2004
3 6 4/1/2003 2/1/2004
Run Code Online (Sandbox Code Playgroud)
基于每个用户执行此操作非常简单,因为我可以使用子查询来为指定用户选择max contractID.我正在使用SQL服务器,所以如果有一种特殊的方式来做这种味道,我愿意使用它.就个人而言,我喜欢与引擎无关的东西.
但是,我将如何编写一个能够实现所有用户目标的查询?
编辑:我还应该补充一点,我正在寻找每个用户的最大contractID值,而不是最近的日期.
这是我的简单测试脚本.只是尝试做一个基本的选择语句.找到教程的基本部分.
from sqlalchemy import *
db = create_engine('mssql+pyodbc://user:pass@ip_address/database_name')
db.echo = True
metadata = MetaData(db)
users = Table('member', metadata, autoload=True)
def run(stmt):
rs = stmt.execute()
for row in rs:
print row
s = users.select(users.c.fname == 'Bill')
run(s)
Run Code Online (Sandbox Code Playgroud)
经过一个小时的搜索并尝试了一些解决方案之后,我就没有比开始时更接近解决它了.希望我在某个地方犯了一个简单的错误,但我找不到它......
这是我得到的错误
sqlalchemy.exc.DBAPIError: (Error) ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)') None None
Run Code Online (Sandbox Code Playgroud)
任何帮助将非常感激!