当前位置: 首页 > 知识库问答 >
问题:

SQL无法使用Group By筛选特定日期

南宫阳焱
2023-03-14

这可能很简单,但我无法获得所需的输出。

我正在使用下面这个简单的查询来获取一个项目编号的最新exp\u日期

select g.item_no,max(g.exp_date)
from grn_drug_item g
group by g.item_no

第一次查询仅显示20年8月1日的以下结果

IT00002530 01-AUG-20

现在,我想筛选上述结果,以获得“特定”的最新exp\u日期(例如:20年8月1日),因此我将查询修改为:

select g.item_no,max(g.exp_date)
from grn_drug_item g
where g.exp_date = to_date('01-AUG-20','DD-MON-YY')
group by g.item_no

但这给了我多行,如果我使用,其中g.item_no='IT00002530',它会获取所需的输出。

如何让过滤在这里为特定的exp_date工作?

共有3个答案

翟博雅
2023-03-14

这与其他答案略有不同。但是您可能会发现在聚合之前进行过滤是对性能的显着胜利:

select g.item_no, max(g.exp_date)
from grn_drug_item g
where g.exp_date >= date '2020-08-01'
group by g.item_no
having max(g.exp_date) = date '2020-08-01';

这可能会显着减少需要聚合的数据量。另请注意使用date来引入日期常量

应安国
2023-03-14

这是因为你使用了WHERE子句。您的查询当前选择了在8月1日有一个到期实例,但可以有多个到期日期的所有项目。

使用“最大(g.exp\u date)=截止日期('20年8月1日,'DD-MON-YY')”应该可以得到您想要的,因为它标识了每个项目的最新到期日期。您的查询应如下所示:

select g.item_no, max(g.exp_date)
from grn_drug_item g
group by g.item_no
having max(g.exp_date) = to_date('01-AUG-20','DD-MON-YY')
谯阳伯
2023-03-14

如果无法访问您的数据,这有点推测性,但看起来您选择的项目的exp\u日期更晚。您的筛选太早-日期较晚且特定日期的项目将包含在筛选中,该子集中的最大日期显然是同一日期。

您可以在分组后应用筛选器,其中包含:

select g.item_no,max(g.exp_date)
from grn_drug_item g
group by g.item_no
having max(g.exp_date) = to_date('01-AUG-20','DD-MON-YY')

“YY”的使用有点令人担忧;使用两位数年份是个问题,但如果必须使用,请使用RR。但最好使用4位数的年份,对于固定日期,使用日期文字更简单:

having max(g.exp_date) = date '2020-08-01'
 类似资料:
  • 这一组数据在进行groupby前已经完成筛选,但进行groupby聚合后的结果显示是利用未筛选的数据进行的聚合,就像下面的结果,在groupby前已经完成点击量非0过滤,但最后仍存在含0的资源,询问chatGPT给的方案是可能用索引前的数据进行的聚合,重置索引后仍无法解决,请教大牛是否遇到过类似的问题,虽然可以在聚合后重新进行filter过滤,但这个问题搞得很焦灼 代码源文本

  • 我目前有一个大型数据集,但为了简单起见,它看起来如下所示: 我想在此数据集上使用一个窗口函数使其看起来如下所示: 过滤器背后的逻辑应该是,对于每个人,我们按照他们认识的时间长短对他们的朋友进行排序(较高的值位于顶部),然后只保留足够的朋友,以便他们的为100。 例如,Alice只需要Bob,因为她认识他的时间最长,而且他们的超过100。Bob需要Daniel和Alice,因为Bob认识Daniel

  • 问题内容: 我正在尝试CSS过滤器,但在我的Firefox(15.0)浏览器中不起作用。 HTML: CSS: 问题答案: GrayScale具有使用-moz-filter在Firefox中运行的限制。 要使其正常工作,请使用以下代码段:

  • 我正试图返回一份基于用户给定日期的患者名单。但每次我运行该方法时,它都会返回所有医生的列表,而不是经过筛选。 主屏幕上的代码 过滤方法 搜索患者日期的方法 我初始化了两个患者,即patient1和patient 2。病人1的医生叫李医生,病人2的医生叫詹姆斯医生。首先,我为patient1输入以下信息,而patient2现在什么都没有。 当我拿到医生名单时,问题就来了。即使日期是错误的,它仍会继续

  • 我有一个数据框,如下所示:数据框: 我试图做的是检查列A和列B的值相同的行,并获得每个组的最大值:更准确地说:在我的示例中,我希望得到行1和行3。因此,预期产出应为: 我尝试将groupby with max方法应用于列_C:这似乎可行,但我得到的输出是列_C。以下是我的代码: 结果如下 我知道为什么我有一个serie(因为我对列_C应用了max方法),但我无法找到一种方法来获取相应的行,而不是只

  • 我用的是这样的意图: 在中,我有以下内容: 当我从特定的相册中选择图像时,比如“posts”、“profile photos”(参见屏幕截图),我无法在中获取图像路径。可以从其他相册中选择图像,没有任何问题。 我尝试在中添加但返回。 这里也有类似的问题,但没有人回答。 请救命!