Python Teradata Assistant与Pyodbc中运行的查询返回不同的结果

Python Teradata Assistant与Pyodbc中运行的查询返回不同的结果,python,python-2.7,teradata,pyodbc,Python,Python 2.7,Teradata,Pyodbc,我在Teradata SQL Assistant和Python 2.7中通过pyodbc运行这个精确的查询(硬编码值和所有值)。我从这两种方法中得到了不同的结果,而pyodbc方法似乎不正确 SELECT serial_num, event_desc,event_level, count(*) as "Count", MAX(event_ts) as "Latest Event Timestamp" FROM mytable WHERE serial_num in('se

我在Teradata SQL Assistant和Python 2.7中通过pyodbc运行这个精确的查询(硬编码值和所有值)。我从这两种方法中得到了不同的结果,而pyodbc方法似乎不正确

SELECT serial_num, event_desc,event_level, count(*) as "Count", MAX(event_ts) as "Latest Event Timestamp"
    FROM mytable
    WHERE
    serial_num in('serial1','serial2')
    AND event_ts >= '2014-01-01 00:00:00.000'
    AND event_ts <= '2014-03-31 23:59:59.999'
    and event_desc = 'My Test Event'
    group by serial_num, event_desc,event_level
    order by serial_num, "Latest Event Timestamp"
但是,当使用pyodbc在Python中运行时,我得到了不同的结果:

serial_num  event_desc      event_level     Count   Latest Event Timestamp
serial1     'My Test Event' '1'             2       datetime.datetime(2014, 1, 3, 10, 5, 15
serial2     'My Test Event' '2'             1       datetime.datetime(2014, 3, 14, 2, 22, 47
serial2     'My Test Event' '1'             4       datetime.datetime(2014, 3, 22, 6, 36, 40
不同之处在于计数列和时间戳列。我不确定python中的查询究竟在做什么。它返回有效的时间戳,但它们与
分组依据的最大时间不同,并且计数不正确。为什么?

这是未分组的数据:

serial_num  event_desc      event_level     Latest Event Timestamp
serial1     My Test Event   1               1/2/2014 07:11:22.000000
serial1     My Test Event   1               1/3/2014 10:05:15.000000
serial1     My Test Event   1               1/19/2014 13:32:17.000000
serial1     My Test Event   1               3/4/2014 09:16:15.000000
serial1     My Test Event   1               3/4/2014 10:03:28.000000
serial2     My Test Event   1               1/19/2014 14:04:47.000000
serial2     My Test Event   1               1/28/2014 13:27:00.000000
serial2     My Test Event   2               1/28/2014 13:57:12.000000
serial2     My Test Event   1               2/5/2014 01:36:47.000000
serial2     My Test Event   2               2/5/2014 02:56:53.000000
serial2     My Test Event   1               2/23/2014 01:57:19.000000
serial2     My Test Event   1               2/27/2014 13:50:08.000000
serial2     My Test Event   1               2/28/2014 13:55:51.000000
serial2     My Test Event   1               3/9/2014 15:31:00.000000
serial2     My Test Event   1               3/14/2014 01:31:36.000000
serial2     My Test Event   2               3/14/2014 02:22:47.000000
serial2     My Test Event   1               3/16/2014 03:29:04.000000
serial2     My Test Event   1               3/22/2014 02:07:04.000000
serial2     My Test Event   1               3/22/2014 06:36:40.000000
serial2     My Test Event   1               3/27/2014 13:01:25.000000
serial2     My Test Event   2               3/27/2014 13:32:59.000000
正在运行的python代码如下

qry = <<Above SQL>>
conn=pyodbc.connect('DRIVER={Teradata};DBCNAME=server;UID=user;PWD=password;QUIETMODE=YES;', ANSI=True, autocommit=True)
teracurs=self.conn.cursor()
res = teracurs.execute(qry).fetchall()        
qry=
conn=pyodbc.connect('DRIVER={Teradata};DBCNAME=server;UID=user;PWD=password;QUIETMODE=YES;',ANSI=True,autocommit=True)
teracurs=self.conn.cursor()
res=teracurs.execute(qry.fetchall())

如果在Teradata SQL Assistant中运行,为什么
MAX()
count
语句会按预期工作,而如果通过pyodbc运行查询,则不会

Teradata SQL Assistant中的会话模式是什么?我在PyODBC中看到您正在使用ANSI。@RobPaller
从dbc.sessioninfo中选择事务模式,其中SessionNo=SESSION返回
T
。我将PyODBC调整到相同的,仍然没有变化。然而,我没有想到要看这个。谢谢你的指针。你应该像时间戳'2014-01-01 00:00:00.000'那样写时间戳,但这不应该导致这样的结果。您是否可以检查DBQL数据以查看实际提交给Teradata的SQL,可能是PyODBC修改了它?
qry = <<Above SQL>>
conn=pyodbc.connect('DRIVER={Teradata};DBCNAME=server;UID=user;PWD=password;QUIETMODE=YES;', ANSI=True, autocommit=True)
teracurs=self.conn.cursor()
res = teracurs.execute(qry).fetchall()