0

我有一个活动表,一些标记为“评估”(type_id 为 50),一些标记为“咨询”(type_id 为 9)以及活动日期。我需要比较这些日期,以了解人们在评估后等待咨询的时间。该表包含许多人的行,这是“id”的主键。我的问题是如何生成包含同一个人的评估详细信息和咨询详细信息的结果行,以便我可以比较日期。我尝试将表连接到自身,并尝试嵌套子查询,但我无法理解。我正在使用 Access 2010 顺便说一句。请原谅我的愚蠢,但这里有一个将表格连接到自身的示例,它不起作用,没有产生任何结果(不足为奇):

表看起来像:

ID    TYPE_ID   ACTIVITY_DATE_TIME
----------------------------------
1        9      20130411  
1     v 50 v    20130511  
2        9      20130511  
3        9      20130511 

在上面的最后两行只有评估,所以我想忽略它们,只处理有评估和咨询'type-id'的情况

SELECT
  civicrm_activity.id, civicrm_activity.type_id,
  civicrm_activity.activity_date_time,
  civicrm_activity_1.type_id,
  civicrm_activity_1.activity_date_time
FROM
  civicrm_activity INNER JOIN civicrm_activity AS civicrm_activity_1
  ON civicrm_activity.id = civicrm_activity_1.id
WHERE
  civicrm_activity.type_id=9
  AND civicrm_activity_1.type_id=50;

我实际上想知道这实际上是否与 SQL 无关?我希望有可能吗?感谢您的耐心等待!

4

2 回答 2

0

您的查询对我来说也不错。一个问题可能是您只使用一个表别名。我不知道,但也许 Access 会“特别”处理表名,因此实际上 WHERE 子句说

WHERE
    civicrm_activity.type_id=9
AND civicrm_activity.type_id=50;

那肯定会解释零行返回!

要解决此问题,请为每个表使用别名。建议短一点的

SELECT  A.id, A.type_id, A.activity_date_time,
              B.type_id, B.activity_date_time
FROM  civicrm_activity as A 
JOIN  civicrm_activity as B
ON    A.id = B.id
WHERE A.type_id=9
AND   B.type_id=50;
于 2013-05-13T05:25:02.840 回答
0

在我看来,您只想获取 TYPE_ID 条目为 9 和 50 的 ID 号。

SELECT DISTINCT id FROM civicrm_activity WHERE type_id = '9' AND id IN (SELECT id FROM civicrm_activity WHERE type_id = '50');

这将为您提供一个 id 列表,其中包含 type_id 9 和 50 的条目。有了该列表,您现在可以获取详细信息。

在 type_id 9 的时候使用这个 SQL

SELECT activity_date_time FROM civicrm_activity WHERE id = 'id_from_last_sql' AND type_id = '9'

在 type_id 50 的时候使用这个 SQL

SELECT activity_date_time FROM civicrm_activity WHERE id = 'id_from_last_sql' AND type_id = '50'
于 2013-05-12T08:54:36.253 回答