【发布时间】:2012-09-04 17:23:06
【问题描述】:
我有一个表,有多个列,包括一个名为“PolicyNumber”的列
这是一个示例:
PolicyNumber
NYH1111
NYD2222
SCH3333
SCS4444
LUH5555
LUS6666
ALH7777
ALW8888
VAH9999
AKH0000
...
NYH1010
NYD2318
此表中有 1,000 多条记录,记录包含每种保单编号类型中的几种。例如,以“NYH”开头的多项政策或以“VAH”开头的多项政策。
可能的策略类型在这里:
NYH
NYD
SCH
SCS
LUH
LUS
ALH
ALW
VAH
AKH
如何执行 SELECT TOP 300,其中至少包含每种策略类型中的一种?请记住,保单类型是保单编号的前 3 个字母。
这甚至可能吗?这样做的目的是我必须从生产中获取 300 条记录以转储到测试环境中,并且我需要包含每个策略中的至少 1 条。在我至少有一个之后,它可以完全随机化。
【问题讨论】:
-
你试过
GROUP BY SUBSTRING(PolicyNumber, 1, 3)吗? -
group by 在这种情况下不会起作用吗?它将所有类似的策略都扔到顶部,从而删除“随机”选择
-
我确定您的要求是可能的,但作为替代方案,您是否考虑过为每种类型选择前 50 名?
WHERE PolicyID LIKE 'NYH%'为每个,然后将您的结果合并到测试台。 -
@DJQuimby
DISTINCT SUBSTRING(... ...ORDER BY RAND()怎么样? -
@DJQuimby,我想我可以这样做并运行多个查询(每种策略类型 1 个)...尽管对此进行 1 个查询会很好!