1
Claim# Total ValuationDt
  1     100     1/1/12
  2     550     1/1/12
  1     2000    3/1/12
  2     100     4/1/12
  1     2100    8/1/12
  3     200     8/1/12
  3     250     11/1/12

使用 MS Access,我需要一个查询,该查询仅返回在该索赔生命周期的某个时间点价值超过 500 美元的索赔。在此示例中,查询应返回

Claim# Total ValuationDt
  1     100     1/1/12
  2     550     1/1/12
  1     2000    3/1/12
  2     100     4/1/12
  1     2100    8/1/12

因为索赔#1 在 2012 年 3 月 1 日的估值超过 500 美元,索赔#2 在 2012 年 1 月 1 日的估值高于 500 美元,而索赔#3 的估值从未超过 500 美元。

4

6 回答 6

5

您可以使用IN

SELECT *
FROM Table1
WHERE Claim IN (SELECT Claim
                FROM Table1
                WHERE Total > 500)

Sql 小提琴演示

于 2013-07-05T15:49:35.570 回答
2

这可能是解决方案

    SELECT distinct * 
    FROM YourTableName 
    WHERE claim# IN (SELECT DISTINCT claim#
                     FROM YourTableName
                     WHERE total > 500) 
    ORDER BY 3;

可选择订购

于 2013-07-05T15:52:32.327 回答
2

这应该工作

Select DISTINCT Claim FROM yourtable Where Total > 500

编辑:

如果我最初的答案不符合您的要求,那么您可以使用子查询。子查询是查询中的查询(嵌套查询)。我们必须这样做的原因是因为如果你使用类似的东西

Select * FROM yourtable Where Total > 500

那么结果集只会是索赔总数高于 500 的那些时刻,但它不会指示它小于或等于 500 的其他时刻。

因此,正如其他人所说,您使用如下子查询:

SELECT *
FROM Table1
WHERE Claim IN (SELECT Claim
                FROM Table1
                WHERE Total > 500)

注意:看到 IN 关键字后面有一个查询,所以我们有嵌套查询(如果您愿意,也可以是子查询)。

为什么它有效?好吧,因为:

SELECT Claim
FROM Table1
WHERE Total > 500

将返回在某个时间点总数大于 500 的所有索赔(仅索赔的数量)。因此,此查询将返回 1 和 2。如果您在原始查询中替换它,您将得到:

SELECT *
FROM Table1
WHERE Claim IN (1, 2)

这将使您获得每行的每一列,其索赔编号等于 1 或 2。

于 2013-07-05T15:48:30.017 回答
2

尝试这个:

Select * from table where claim in (Select claim from table where total > 500)

table是您的表的名称。

于 2013-07-05T15:48:51.000 回答
1

您可以确定哪些[Claim#]值满足您的条件...

SELECT DISTINCT [Claim#]
FROM YourTable
WHERE [Total] > 500

如果这是正确的,请将其用作您INNER JOIN对表的子查询,以将结果集限制为仅这些声明。

SELECT y.[Claim#], y.[Total], y.[ValidationDt] 
FROM YourTable AS y
    INNER JOIN
        (
            SELECT DISTINCT [Claim#]
            FROM YourTable
            WHERE [Total] > 500
        ) AS sub
    ON y.[Claim#] = sub.[Claim#];

将此方法与IN()建议进行比较,看看您是否注意到执行速度有任何差异。

于 2013-07-05T16:00:24.817 回答
0

你应该可以使用

  SELECT [Claim#],[Total],[ValidationDt] 
  FROM yourtable 
  WHERE [Claim#] IN (SELECT [Claim#] 
                     FROM yourtable 
                     WHERE Total >= 500)

对于任何 ValidationDt,应返回所有值 >= 500。

于 2013-07-05T15:50:22.120 回答