mySQL选择distinct并添加唯一值

时间:2016-03-24 20:11:25

标签: mysql sql

我想挑选任何sql专家的大脑,他们可以告诉我如何从字段中选择不同的值,然后为每组不同的值添加唯一的ID。我可以编写一些快速代码来执行此操作,但我在查询中需要它。重要的是要添加我需要从1开始的唯一值(否则我知道我可以使用现有的ID)。 所以它看起来像这样:

Patient_ID   New_Unique_Value
23            1
23            1
23            1
4378          2
4378          2
48            3
48            3
48            3
48            3

我可以将Patient_ID写入临时表,但我找不到有关动态添加唯一增量的任何信息。

3 个答案:

答案 0 :(得分:1)

MySQL中最简单的方法是使用变量:

select p.Patient_ID, 
       (@rn := if(@p = p.Patient_ID, @rn,
                  if(@p := p.Patient_ID, @rn + 1, @rn + 1)
                 )
       ) as New_Unique_Value
from t cross join
     (select @rn := 0, @p := -1) params
order by patient_id;

答案 1 :(得分:0)

你可以使用这样的东西

set @a:=0;
SELECT alpha2.ndx, beta.item
FROM (
   SELECT alpha.item, (@a := @a + 1) as ndx from (
       SELECT DISTINCT item FROM tbl
   ) alpha
) AS alpha2 INNER JOIN tbl AS beta ON beta.item = alpha2.item

答案 2 :(得分:0)

我的解决方案使用临时表

CREATE TABLE IF NOT EXISTS OAK_origres.TEMP2 (PATID INTEGER, NEWID INTEGER AUTO_INCREMENT, PRIMARY KEY (NEWID));

INSERT INTO OAK_origres.TEMP2 (PATID) 
SELECT DISTINCT OAK_origres.`Original Results`.`Patient ID` FROM OAK_origres.`Original Results` 
INNER JOIN OAK_patient.Demographic ON OAK_origres.`Original Results`.`Patient ID` = OAK_patient.Demographic.`System ID` 
WHERE `Import Date` = '2014-09-23 13:00:00';

我需要的是较小的值,我可以用来区分“导入日期”的值。我使用了自动增量值:

UPDATE OAK_origres.`Original Results` 
INNER JOIN OAK_origres.TEMP2 
    ON OAK_origres.`Original Results`.`Patient ID` = OAK_origres.TEMP2.PATID 
SET `Import Date`=DATE_ADD(`Import Date`, INTERVAL  OAK_origres.TEMP2.NEWID SECOND)