2016-10-28 125 views
0

我得到了我的sql查询工作,但是当我找到具有相同小时和分钟的日期时,我无法使查询工作。例如: enter image description hereMax(日期时间)忽略秒

在列“trans_date”我无法使用我的查询,因为与max(trans_date)我没有得到任何结果,不知何故SQL是忽略秒。

这是我的完整的SQL语句:

SELECT till.code,art.description 
FROM [TCPOS4].[dbo].[transactions] as tra, 
TCPOS4.dbo.articles as art,[TCPOS4].[dbo].[trans_articles] as tro, 
[TCPOS4].[dbo].[tills] as till,[TCPOS4].[dbo].[shops] as shop 
where tra.till_id=till.id and shop.id=till.shop_id and tro.transaction_id=tra.id and 
art.id=tro.article_id and tra.trans_date =(select max(trans_date) 
from tcpos4.dbo.transactions as t2 where t2.till_id=tra.till_id and trans_date > '2016-10-26 00:00:0.000' and trans_date< '2016-10-27 00:00:00.000') 
group by till.code,art.description 

与此查询我正在从2016年10月26日至2016年10月27日的最高TRANSACTION_DATE每个“代码”,但我不从代码“5446”获取任何信息。我应该得到“TABLE CHOCOLECHE-CONGUITOS”,因为它是范围内的最大trans_date。

+0

是该范围内的TRANS_DATE '2016年10月26日00:00:0.000' 到 '2016年10月27日00:00:00.000' 独家?你没有得到什么日期? – Cato

+2

我想这个问题是在'INNER JOIN'周围的某个地方。倾向于使用显式连接语法,而不是“通过逗号和谓词在哪里”来连接oldschool。 –

+0

该行的日期是图片中的第一张,与其他日期几乎相同。我认为问题出在那里,因为我一直在做实验,并且出现错误,我有相同的时间和分钟。那么,我没有错误,查询只是忽略了代码'5446' – talendguy

回答

0

尝试

...CAST(tra.trans_date AS DATE) = (select CAST(max(trans_date) AS DATE)... 
+0

这是行不通的。 – talendguy

+0

您需要进行实验,删除一些条件并找出哪些条件阻止它出现 - 我们没有什么信息可以继续 - 是导致它不出现的其他条件之一 - 如果删除日期条件完全,或使其始终如一 - 行是否出现在列表中呢? – Cato

+0

我一直在试验这个查询,并且我意识到问题是由于日期。这个查询正在帮助我处理所有事情,当一行中的小时和分钟是相同的时候,我只有问题。最大(日期)忽略从我的datetype秒,不知道为什么。 – talendguy

1

您就可以使用以下不同的方法尝试一下呢?

SELECT code, description 
FROM 
(
    SELECT till.code, art.description, 
    row_number() OVER (PARTITION BY till.code ORDER BY trans_date DESC) RowNum 
    FROM [TCPOS4].[dbo].[transactions] AS tra 
    LEFT JOIN [TCPOS4].[dbo].[tills] AS till 
    ON tra.till_id=till.id 
    LEFT JOIN [TCPOS4].[dbo].[shops] AS shop 
    ON shop.id=till.shop_id 
    LEFT JOIN [TCPOS4].[dbo].[trans_articles] AS tro 
    ON tro.transaction_id=tra.id 
    LEFT JOIN TCPOS4.dbo.articles AS art 
    ON art.id=tro.article_id 
) sbt 
WHERE RowNum=1 

以这种方式,即使您有相同的确切日期,每个till.code也会得到一个结果。

如果需要,您可以在ORDER BY中添加更多字段。

编辑:在PARTITION BY中删除art.description。

编辑2:与LEFT转换JOIN

+0

这是行不通的,结果是一样的 – talendguy

+0

你可以尝试删除art.description在PARTITION BY? – Lucbert

+0

仍然是相同的。 – talendguy