用于从表中选择数据的SQL查询

时间:2012-08-21 09:12:59

标签: sql ms-access

我正在研究一项正在检查结肠直肠癌的项目。我有一些数据,我想用Sql查询过滤。问题是某些实验失败了,因此如果第二次或第三次尝试这个实验,有些样本会在另一个指向_2或_3的文件夹中。

我的数据如下:

enter image description here

所以我想检查Sentrix_ID是否存在超过1次,如果这样,查询应该采用最新版本_2或_3等等。是否有任何查询会对我这样做。

还是raw_data:

ID  Sample_Name Sample_Code Sample  Sentrix_ID  NorTum  Pool_ID Sample_Group    Sentrix_Position    Folderdate  opmerkingen
1835    99-02872T2  99-02872T2  99-02872    1495455 T2  GS0006564-OPA   HNPCC_UV    R001_C010   Exp060501   MLH1-UV
1836    97-5332T1   97-5332T1   97-5332 1495455 T1  GS0006564-OPA   MUTYH   R001_C011   Exp060501   1105delC_G382D
1827    R02-81709N  R02-81709N  R02-81709   1495455 N   GS0006563-OPA   HNPCC_UV    R001_C002   Exp060501   MSH2
492 t03-32120 N t03-32120 N t03-32120   1495455_2   N   GS0006563-OPA   TEM_TME_LOH R004_C005   Exp060920   
484 t02-27628 N t02-27628 N t02-27628   1495455_2   N   GS0006563-OPA   TEM_TME_LOH R004_C004   Exp060920   
478 t03-06297 B2    t03-06297 B2    t03-06297   1495455_2   B2  GS0006563-OPA   TEM_TME_LOH R006_C003   Exp060920   
479 t03-06297 B3    t03-06297 B3    t03-06297   1495455_2   B3  GS0006563-OPA   TEM_TME_LOH R007_C003   Exp060920   

提前致谢

3 个答案:

答案 0 :(得分:1)

SELECT TOP 1 * FROM [YourTable] WHERE [Sentrix_ID] LIKE '<value>%' ORDER BY [Sentrix_ID] DESC

这对您的问题有用吗?

答案 1 :(得分:1)

SELECT * 
FROM (
    SELECT count(Sentrix_ID) AS senId 
    FROM tableName 
    GROUP BY Sentrix_ID
) AS m  
WHERE senId = 1;

如果Sentrix_ID存在多于1它将提供最新版本,则会产生此查询,但在上述问题中,它将显示空表,因为Sentrix_id(1495455&amp; 1495455_2)重复了一次以上。因此,如果您将_3作为表中的一个条目,则意味着它将提供_3数据。

答案 2 :(得分:1)

所以你想把你的sentrix_id列中的值解析为前缀和后缀?您可以使用instr()函数来标识下划线的位置(如果有),除非您知道前缀的长度始终相同。

尝试类似

的内容
select *, 
left(sentrix_id,8) as prefix,
iif(len(sentrix_id) = 8 ,"",mid(sentrix_id,10)) as suffix
from table

如果使用等效的sql创建新查询,则应在表中看到另外两行,一行用于ID,另一行用于版本后缀。

然后,在第二个新查询中使用这些查询结果,您可以按前缀分组并返回max(后缀)。