我想挑选任何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写入临时表,但我找不到有关动态添加唯一增量的任何信息。
答案 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)