我想在两天之间的时间间隔内识别数据

时间:2016-03-04 14:18:25

标签: sql ms-access

我有两个表,第一个是关于每分钟股票价格的数据表。它由六列组成,包括日期和时间,开盘价,最高价,最低价和收盘价。

表数据

ID  Field1      Field2       Field3   Field4    Field5   Field6
2   2016.02.17  11:36:00 PM  1.42918  1.42924   1.42904  1.4292
3   2016.02.17  11:37:00 PM  1.42919  1.42922   1.42886  1.42912
4   2016.02.17  11:38:00 PM  1.42911  1.42917   1.42902  1.42917
5   2016.02.17  11:39:00 PM  1.42918  1.42918   1.42887  1.42904

第二个表包含七列,日期和六个不同的时间。

表时间

ID  Field1      Field2      Field3      Field4       Field5      Field6      Field7
2   2016.01.02  5:35:00 AM  6:58:00 AM  12:25:00 PM  3:30:00 PM  5:52:00 PM  7:22:00 PM
3   2016.01.03  5:35:00 AM  6:58:00 AM  12:25:00 PM  3:30:00 PM  5:53:00 PM  7:22:00 PM
4   2016.01.04  5:36:00 AM  6:59:00 AM  12:26:00 PM  3:31:00 PM  5:53:00 PM  7:23:00 PM
5   2016.01.05  5:36:00 AM  6:59:00 AM  12:26:00 PM  3:31:00 PM  5:54:00 PM  7:24:00 PM

我做了四个查询的工作,从第二个表格中获取指定期间的股票价格,显示日期,开盘价,最高价格和成就时间,最低价格和时间以及成就时间和收盘价。

查询1

SELECT
  First(Times.Field1) AS [Date], First(Times.Field2) AS FirstOfField2, 
  First(Times.Field6) AS FirstOfField6, First(Data.Field3) AS [Open],   
  Max(Data.Field4) AS [Max], Min(Data.Field5) AS [Min], Last(Data.Field6) AS [Close]
FROM Data, Times
WHERE (
  ((Data.Field1)=[Times].[Field1])
  AND ((Data.Field2) Between [Times].[Field2] And [Times].[Field6])
)
GROUP BY Times.ID;

结果1

Date        FirstOfField2  FirstOfField6  Open     Max      Min      Close
2016.02.19  5:29:00 AM     6:22:00 PM     1.43217  1.4337   1.42461  1.42653
2016.02.22  5:28:00 AM     6:23:00 PM     1.42744  1.42892  1.40567  1.41282
2016.02.23  5:27:00 AM     6:24:00 PM     1.4133   1.41527  1.40615  1.40813

查询2

SELECT
  First(Result.Date) AS [Date], First(Data.Field2) AS MaxTime, 
  First(Result.Max) AS MaxValue
FROM Data, Result
WHERE (
  ((Data.Field4)=[Result].[Max])
  AND ((Data.Field1)=[Result].[Date])
  AND ((Data.Field2) Between [Result].[FirstOfField2] And [Result].[FirstOfField6])
)
GROUP BY Result.Date;

结果2

Date          MaxTime     MaxValue
2016.02.18  3:21:00 PM  1.43938
2016.02.19  8:39:00 AM  1.4337
2016.02.22  8:37:00 AM  1.42892

查询3

SELECT
  First(Result.Date) AS [Date], First(Data.Field2) AS MinTime, 
  First(Result.Min) AS MinValue
FROM Data, Result
WHERE (
  ((Data.Field5)=[Result].[Min])
  AND ((Data.Field1)=[Result].[Date])
  AND ((Data.Field2) Between [Result].[FirstOfField2] And [Result].[FirstOfField6])
)
GROUP BY Result.Date;

结果3

Date          MinTime      MinValue
2016.02.18  10:01:00 AM  1.42558
2016.02.19  4:32:00 PM   1.42461
2016.02.22  3:40:00 PM   1.40567`

查询4(最终)

SELECT
  First(Result.Date) AS [Date], First(Result.FirstOfField2) AS FirstOfFirstOfField2,
  First(Result.FirstOfField6) AS FirstOfFirstOfField6, First(Result.Open) AS [Open],
  First(Result.Max) AS MaxValue, First(Max.MaxTime) AS MaxTime, First(Result.Min) AS MinValue,
  First(Min.MinTime) AS MinTime, First(Result.Close) AS [Close]
FROM Result, [Max], [Min]
WHERE (((Result.Max)=([Max].[MaxValue])) AND ((Result.Min)=([Min].[MinValue])))
GROUP BY Result.Date;

结果4(最终)

Date        FirstOfFirstOfField2  FirstOfFirstOfField6  Open     MaxValue  MaxTime      MinValue  MinTime      Close
2016.02.18  5:30:00 AM            6:22:00 PM            1.42989  1.43938   3:21:00 PM   1.42558   10:01:00 AM  1.43572
2016.02.19  5:29:00 AM            6:22:00 PM            1.43217  1.4337    8:39:00 AM   1.42461   4:32:00 PM   1.42653
2016.02.22  5:28:00 AM            6:23:00 PM            1.42744  1.42892   8:37:00 AM   1.40567   3:40:00 PM   1.41282
2016.02.23  5:27:00 AM            6:24:00 PM            1.4133   1.41527   11:41:00 AM  1.40615   5:47:00 PM   1.40813

当我想确定两个不同日期之间的两个不同时间时,我面临的问题。

1 个答案:

答案 0 :(得分:0)

按日期和时间分组。如果您还想通过ID,则按ID,日期和时间进行分组