【问题标题】:Article stock transaction table query Max Date gives multiple results on same timestamp, only need the last文章股票交易表查询Max Date在同一时间戳上给出多个结果,只需要最后一个
【发布时间】:2021-10-07 15:41:03
【问题描述】:

我有一个 Article Stock 交易表,我只需要以下列:Article、Date 和 Stock。

在同一天,即使在相同的时间戳上,该表也为同一篇文章提供了多个结果,我只需要最新日期的文章。似乎最后一行是具有最新 Stock 值的文章。 Bud 我怎么能在一个只显示最新日期的查询中写这个? (屏幕截图中的蓝色行)

在我的示例中,我只过滤了一篇文章。

 SELECT artikel as Article, max(datum) as `Date`, bestand as 
 Stock  FROM data.HB001ARTIKELBESTANDSBEWEGUNG
 where datum > "2021-08-11 00:00:00" and datum < "2021-08-13 
00:00:00" and lager = 1 and artikel = '5201114970'
group by artikel, bestand, datum
order by artikel;

 

致以诚挚的问候,

比约恩

我添加了带有自动增量的额外行,所以现在我为每篇具有最新日期的文章获取最高行号。现在我如何过滤每篇文章只能得到一个结果?

SELECT Article, max(CountDate), Stock, Nr  FROM data.STOCKCOUNT
where CountDate > "2021-08-11 00:00:00"  and CountDate < "2021- 
08-13 00:00:00" and Article IN ('5201114970', '1361001580')
group by Article, Stock, CountDate, Nr
order by Nr, CountDate desc, Article;

我添加了带有自动增量的额外行,所以现在我为每篇具有最新日期的文章获取最高行号。现在我如何过滤每篇文章只得到一个结果,每篇文章的最高行号过滤?

SELECT artikel as Article, max(datum) as Date, bestand as Stock, 
ROW_NUMBER() OVER(ORDER BY datum asc) as Nr  FROM 
data.HB001ARTIKELBESTANDSBEWEGUNG b where datum > "2021-08-11 
00:00:00" and datum < "2021-08-13 00:00:00" and lager = 1 and 
artikel in ('5201114970', '1361001580') group by artikel, 
bestand, datum order by datum desc, artikel

【问题讨论】:

  • 我认为选择最新日期没有逻辑,因为所有日期值都相同。您需要修改插入查询,或者在表中添加一个自动增量列并选择特定日期的最大自动增量值
  • 感谢 Rosh 的回复,我知道这看起来毫无意义,但我查了几篇文章,总是最后一篇是股票价值正确的。表面之下是否有某种时间戳包含更具体的时间戳,可能以毫秒为单位?我将尝试使用自动增量列。
  • 将列类型更改为 timestamp(3) 并使用 CURRENT_TIMESTAMP(3) 插入记录以在您的记录中包含毫秒。用 mysql 5.7 测试
  • @rosh-dev 你能告诉我如何过滤最高行号,看看我的回答。时间戳给出:000 毫秒,所以很遗憾我不能使用它。
  • @rosh-dev 我将信息添加到问题中。

标签: mysql unique stock maxdate


【解决方案1】:

请检查查询。我无法测试

SELECT Article, max(Nr), Stock, CountDate  FROM data.STOCKCOUNT
where CountDate > "2021-08-11 00:00:00"  and CountDate < "2021- 
08-13 00:00:00" and Article IN ('5201114970', '1361001580')
group by Article, Stock, CountDate
order by Nr DESC;

【讨论】:

  • 我认为存在误解,因为现在我得到了相同的列表,但相反。每篇文章我只需要一个结果。使用自动增量行,它做了一些好事,每篇文章都从 1 开始到该文章范围的结尾。正确的值始终是该范围内的最后一个数字,所以当我可以过滤每篇文章,然后是每篇文章的最高自动增量数字时,这将为我提供正确的结果,并为每篇文章提供一个值。
  • 如果您对多篇文章运行此查询,我的答案将不起作用,我认为您只会对一篇文章运行此查询。
  • 我在问题中添加了新信息,我在查询中使用了 ROW_NUMBER,有没有办法根据最高行号过滤每篇文章?因为那样我就有了我的结果。
  • 我不推荐 ROW_NUMBER 解决方案。无法保证您的记录顺序
猜你喜欢
  • 1970-01-01
  • 2021-12-22
  • 2014-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多