如何在MySQL中将键/值样式表转换为普通表

如何在MySQL中将键/值样式表转换为普通表,mysql,pivot,crosstab,entity-attribute-value,Mysql,Pivot,Crosstab,Entity Attribute Value,我正在尝试将下表转换为更易于查询的内容。历史数据很重要,所以它不能被扔掉,变量有无限多的选项(我只需要在最终结果中使用其中的一些) 这几乎正是我需要做的,但它不考虑历史数据,并假设变量对于用户ID是唯一的。在我的情况下,用户ID可能有3或4个相同的变量,我需要最新的变量。 见> 获取每个用户最近的条目是一个常见问题,通常在堆栈溢出时标记为magest-n-per-group。我建议为此创建一个视图,尽管这并不是绝对必要的 CREATE VIEW LatestKeyValue AS SELECT

我正在尝试将下表转换为更易于查询的内容。历史数据很重要,所以它不能被扔掉,变量有无限多的选项(我只需要在最终结果中使用其中的一些)

这几乎正是我需要做的,但它不考虑历史数据,并假设变量对于用户ID是唯一的。在我的情况下,用户ID可能有3或4个相同的变量,我需要最新的变量。 见>


获取每个用户最近的条目是一个常见问题,通常在堆栈溢出时标记为
magest-n-per-group
。我建议为此创建一个视图,尽管这并不是绝对必要的

CREATE VIEW LatestKeyValue AS
 SELECT k1.*
 FROM KeyValue AS k1
 LEFT OUTER JOIN KeyValue AS k2
  ON (k1.UUID_User, k1.Variable) = (k2.UUID_User, k2.Variable) 
  AND k1.DateSet < k2.DateSet
 WHERE k2.DateSet IS NULL

答对了,这正是我需要看到的,我错在哪里了。这正是我所需要的,谢谢。请查看与您的MariaDB服务器版本相对应的手册,以了解使用near'的正确语法THEN@HelgaIliashenko,我不使用MariaDB。但你是对的,我在SQL语法中犯了一个错误,我想我已经纠正了。谢谢你的否决票。@BillKarwin MariaDB只是一个完全向后兼容的MySQL fork,它与最新的Ubuntu安装以及XAMPP一起提供。谢谢你的更正,我已经取消了否决票。
|UUID_User |FirstName |LastName  |
|----------|----------|----------|
|123XX12   |Jane      |Smith     |
|123XX62   |John      |Smith     |
CREATE VIEW LatestKeyValue AS
 SELECT k1.*
 FROM KeyValue AS k1
 LEFT OUTER JOIN KeyValue AS k2
  ON (k1.UUID_User, k1.Variable) = (k2.UUID_User, k2.Variable) 
  AND k1.DateSet < k2.DateSet
 WHERE k2.DateSet IS NULL
SELECT UUID_User, 
  MAX(CASE Variable WHEN 'FirstName' THEN Value END) AS FirstName,
  MAX(CASE Variable WHEN 'LastName' THEN Value END) AS LastName
FROM LatestKeyValue
GROUP BY UUID_User