Sql 从通过分组方式获得的数据子集中选择最小值

Sql 从通过分组方式获得的数据子集中选择最小值,sql,ms-access,select,group-by,Sql,Ms Access,Select,Group By,有一个包含小时timeseries数据的数据库,其中DB中的每一行表示一小时。例如: TIMESERIES TABLE id date_and_time entry_category 1 2017/01/20 12:00 type_1 2 2017/01/20 13:00 type_1 3 2017/01/20 12:00 type_2 4 2017/01/20 12:00 type_3 首先,我

有一个包含小时timeseries数据的数据库,其中DB中的每一行表示一小时。例如:

TIMESERIES TABLE

id     date_and_time        entry_category
1      2017/01/20 12:00     type_1
2      2017/01/20 13:00     type_1
3      2017/01/20 12:00     type_2
4      2017/01/20 12:00     type_3

首先,我使用
GROUP BY
语句查找每种类型的条目类别的最新日期和时间:

选择最大值(日期和时间),输入类别
从timeseries_表
按条目和类别分组;
但是现在,我想找出我通过上面列出的查询获得的
datetime
中最近的日期和时间。我需要以某种方式使用
SELECT MIN(date和time)
,但如何让SQL知道我想将上一个查询的输出作为“新表”来应用新的SELECT查询?对于上面显示的示例,
日期和时间=2017/01/20 12:00
,我的总查询的输出应该是一个值

我尝试过使用别名,但似乎无法做到这一点,它们只重命名现有的列或表(或者我误用了它们)。有许多问题试图列出某个特定组的最大值或最小值(例如,或),这是我已经实现的,但我现在想在这个已获得日期时间的列表上进行工作。我的数据库结构非常简单,但我缺乏将这些查询串在一起的知识

谢谢,干杯

这就是你想要的吗

SELECT TOP 1 MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category
ORDER BY MAX(date_and_time) ASC;
这是回报。如果您不需要领带,请包括一个附加的排序键:

SELECT TOP 1 MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category
ORDER BY MAX(date_and_time) ASC, entry_category;
这是你想要的吗

SELECT TOP 1 MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category
ORDER BY MAX(date_and_time) ASC;
这是回报。如果您不需要领带,请包括一个附加的排序键:

SELECT TOP 1 MAX(date_and_time), entry_category
FROM timeseries_table
GROUP BY entry_category
ORDER BY MAX(date_and_time) ASC, entry_category;

您可以将第一个查询用作子查询,这类似于您所描述的使用第一个查询的输出作为第二个查询的输入。在这里,您将根据需要从最小日期中取出一行

SELECT MIN(date_and_time)
FROM (SELECT MAX(date_and_time) as date_and_time, entry_category
FROM timeseries_table
GROUP BY entry_category)a;

您可以将第一个查询用作子查询,这类似于您所描述的使用第一个查询的输出作为第二个查询的输入。在这里,您将根据需要从最小日期中取出一行

SELECT MIN(date_and_time)
FROM (SELECT MAX(date_and_time) as date_and_time, entry_category
FROM timeseries_table
GROUP BY entry_category)a;

打成平局的预期结果是什么?(即两行不同的日期和时间值。)@jarlh如果出现平局,我只想显示其中一行。哪个
entry\u category
具有“最早的”
date\u和\u time
,并不重要,我只需要一个值作为输出:)如果出现平局,预期结果是什么?(即两行不同的日期和时间值。)@jarlh如果出现平局,我只想显示其中一行。哪个
entry\u category
具有“最早的”
date\u和\u time
,这并不重要,我只需要一个值作为输出:)是的,这就是我想要的,非常优雅!带领带的
TOP 1是否也是MS access语法?我似乎在尝试运行时出错…@Stilltonelk。哎呀。这就是SQL Server语法。在MS Access中,
TOP 1
自动包含领带,需要使用
ORDER BY
中的其他键将领带取下。是的,这正是我想要的,非常优雅!带领带的
TOP 1是否也是MS access语法?我似乎在尝试运行时出错…@Stilltonelk。哎呀。这就是SQL Server语法。在MS Access中,
TOP 1
自动包含领带,需要使用
ORDER BY
中的附加键将领带取下。这也适用于广告,谢谢!为了避免“循环引用”,我不得不更改一个变量名(别名和对它的引用)。现在看起来是这样的
SELECT MIN(datetime_2)FROM(SELECT MAX(date_和_time)作为datetime_2,entry_category FROM timeseries_table GROUP BY entry_category)a这也适用于广告,谢谢!为了避免“循环引用”,我不得不更改一个变量名(别名和对它的引用)。现在看起来是这样的
SELECT MIN(datetime_2)FROM(SELECT MAX(date_和_time)作为datetime_2,entry_category FROM timeseries_table GROUP BY entry_category)a