【问题标题】:How to get today record min (time) and previous day record max (time)如何获取今天记录最小值(时间)和前一天记录最大值(时间)
【发布时间】:2010-11-06 11:05:01
【问题描述】:

使用 MS Access 数据库

我想显示今天记录最小值(时间)和前一天记录最大值(时间)

表格

PERSON ID  CARDEVENTDATE  CARDEVENTTIME
5008       20090805       080000
5008       20090805       140000
5008       20090809       180000
5008       20090809       220000
5008       20090813       090000
5008       20090813       200000
5008       20090818       110000
5008       20090818       232200
3405       20090805       080000
3405       20090805       180000
3405       20090809       070000
3405       20090809       230000
3010       20080806       090000
3010       20080806       230000
3010       20080810       100000
3010       20080810       160000

等等……

从上表中我想显示今天最小(时间)和前一天最大(时间)

前一天表示不是昨天,特定人员 ID 的前一个 cardeventtime。

我正在使用子查询。

我正在使用下面提到的查询。

"SELECT PERSONID, CARDEVENTDATE, MIN (CARDEVENTTIME) AS INTIME, 
    MAX (CARDEVENTTIME) AS OUTTIME FROM (SELECT T_PERSON.PERSONID, 
    T_CARDEVENT.CARDEVENTDATE, T_CARDEVENT.CARDEVENTTIME 
FROM (T_TITLE INNER JOIN T_PERSON ON T_TITLE.TITLECODE = T_PERSON.TITLECODE)
    INNER JOIN T_CARDEVENT ON T_PERSON.PERSONID = T_CARDEVENT.PERSONID 
WHERE T_CARDEVENT.CARDEVENTDATE BETWEEN '" & sdate & "' AND '" & edate & "' 
ORDER BY T_PERSON.TITLECODE) GROUP BY PERSONID, CARDEVENTDATE))"

但我无法获得前一天的最大值(时间)。我想获取特定人员 ID 的 Today min(时间)和前一天 Max(时间)。

前一天表示不是昨天,特定人员 ID 的前一个 cardeventtime。

预期输出。

PERSON ID  CARDEVENTDATE  MIN TIME  CARDEVENTDATE  MAX TIME
5008       20090818       110000    20090813       200000
5008       20090813       090000    20090809       220000
5008       20090809       180000    20090805       140000
3405       20090809       070000    20090805       180000
3010       20080810       100000    20080806       230000

等等……

需要查询帮助。

【问题讨论】:

  • 感谢您取下帽子...
  • 为什么你的输出包含三行 5008?我不认为我理解你的逻辑足以给你一个答案。根据您的描述,我认为每个 personID 应该有 1 行。

标签: ms-access sql-server-2000


【解决方案1】:

取消最后一个答案。

假设您将查询保存为 DAYMINMAX。
您需要创建另一个查询:

SELECT a.PERSONID  
     , MAX(b.CARDEVENTDATE) AS PREVDAY  
     , a.CARDEVENTDATE AS NEWDAY  
    FROM DAYMINMAX AS a INNER JOIN  
         DAYMINMAX AS b ON a.PERSONID = b.PERSONID  
                       AND a.CARDEVENTDATE > b.CARDEVENTDATE  
    GROUP BY a.PERSONID, a.CARDEVENTDATE  

该查询为您提供一个日期和每人的前一个日期。让我们将其命名为 DAYPREVNEW。现在你需要另一个查询(你想要的那个):

SELECT a.PERSONID  
     , a.PREVDAY  
     , b.OUTTIME  
     , a.NEWDAY  
     , c.INTIME  
    FROM (DAYPREVNEW AS a INNER JOIN
         DAYMINMAX AS b ON a.PERSONID = b.PERSONID AND a.PREVDAY = b.CARDEVENTDATE) INNER JOIN DAYMINMAX AS c ON a.PERSONID = c.PERSONID AND a.NEWDAY = c.CARDEVENTDATE

由于您的原始查询被多次引用以创建所需的答案,因此最好将其创建为单独的查询而不是使用子查询。

【讨论】:

  • @Wilhelm。在连接运算符中显示语法错误 - Gopal
  • 仍然没有得到正确的答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多