SQL 在orientdb中提取数据的查询建议
SQL query advice for extracting data in orientdb
我正在努力处理 SQL 从 OrientDB 中提取数据的查询。
假设,每个文档都包含每个人在一个月中不同日期的出勤信息,我需要检查哪些人在一个月中的特定一天在场。
文件结构(出勤率):
{
"2017": {
"10": [
{
"day": "2",
"presence": "1"
},
{
"day": "3",
"presence": "1"
},
{
"day": "4",
"presence": "0"
},
{
"day": "5",
"presence": "1"
},
{
"day": "6",
"presence": "1"
},
{
"day": "9",
"presence": "0"
},
{
"day": "10",
"presence": "1"
},
{
"day": "11",
"presence": "1"
},
{
"day": "12",
"presence": "1"
},
{
"day": "13",
"presence": "1"
},
{
"day": "16",
"presence": 1
},
{
"day": "17",
"presence": "0"
},
{
"day": "18",
"presence": 1
},
{
"day": "19",
"presence": 1
},
{
"day": "20",
"presence": 1
},
{
"day": "23",
"presence": "1"
},
{
"day": "24",
"presence": "0"
},
{
"day": "25",
"presence": "1"
},
{
"day": "26",
"presence": "1"
},
{
"day": "27",
"presence": "0"
},
{
"day": "30",
"presence": "1"
},
{
"day": "31",
"presence": "1"
}
],
"09": [
{
"day": "1",
"presence": "0"
},
{
"day": "4",
"presence": "0"
},
{
"day": "5",
"presence": "0"
},
{
"day": "6",
"presence": "0"
},
{
"day": "7",
"presence": "1"
},
{
"day": "8",
"presence": "1"
},
{
"day": "11",
"presence": "1"
},
{
"day": "12",
"presence": "1"
},
{
"day": "13",
"presence": "1"
},
{
"day": "14",
"presence": "1"
},
{
"day": "15",
"presence": "0"
},
{
"day": "18",
"presence": "1"
},
{
"day": "19",
"presence": "1"
},
{
"day": "20",
"presence": "0"
},
{
"day": "21",
"presence": "1"
},
{
"day": "22",
"presence": "1"
},
{
"day": "25",
"presence": "1"
},
{
"day": "26",
"presence": "1"
},
{
"day": "27",
"presence": "0"
},
{
"day": "28",
"presence": "1"
},
{
"day": "29",
"presence": "1"
}
]
},
"person_id": "0f805072-d453-4321-8047-1f75bcb96451"
}
我想得到的是:
"select person_id, presence from attendance[2017][10] where day = 31
and presence = 1"
但我不能让它在 orientDB 中工作..
也许,出于某种原因,数据结构是 sh*tty - 请指教。
谢谢,
拉法尔
试试这个:
select
person_id,
attendance["2017"]["10"][day = "31" AND presence = "1"] as presence
from attendance
UNWIND presence
请注意,我引用了 2017、10、31 和 1,因为在您的模型中它们似乎是字符串,如果它们是数字,您可以删除引号
我明白了!
例如:
select person_id from attendance where 2017['10'] contains (day = 222 and presence=1)
那就行了。
实际上阅读文档很有帮助:http://orientdb.com/docs/1.7.8/orientdb.wiki/SQL-Where.html
如果给定的集合包含至少一个满足下一个条件的元素,则 contains
运算符可以匹配。就这么简单。
我正在努力处理 SQL 从 OrientDB 中提取数据的查询。
假设,每个文档都包含每个人在一个月中不同日期的出勤信息,我需要检查哪些人在一个月中的特定一天在场。
文件结构(出勤率):
{
"2017": {
"10": [
{
"day": "2",
"presence": "1"
},
{
"day": "3",
"presence": "1"
},
{
"day": "4",
"presence": "0"
},
{
"day": "5",
"presence": "1"
},
{
"day": "6",
"presence": "1"
},
{
"day": "9",
"presence": "0"
},
{
"day": "10",
"presence": "1"
},
{
"day": "11",
"presence": "1"
},
{
"day": "12",
"presence": "1"
},
{
"day": "13",
"presence": "1"
},
{
"day": "16",
"presence": 1
},
{
"day": "17",
"presence": "0"
},
{
"day": "18",
"presence": 1
},
{
"day": "19",
"presence": 1
},
{
"day": "20",
"presence": 1
},
{
"day": "23",
"presence": "1"
},
{
"day": "24",
"presence": "0"
},
{
"day": "25",
"presence": "1"
},
{
"day": "26",
"presence": "1"
},
{
"day": "27",
"presence": "0"
},
{
"day": "30",
"presence": "1"
},
{
"day": "31",
"presence": "1"
}
],
"09": [
{
"day": "1",
"presence": "0"
},
{
"day": "4",
"presence": "0"
},
{
"day": "5",
"presence": "0"
},
{
"day": "6",
"presence": "0"
},
{
"day": "7",
"presence": "1"
},
{
"day": "8",
"presence": "1"
},
{
"day": "11",
"presence": "1"
},
{
"day": "12",
"presence": "1"
},
{
"day": "13",
"presence": "1"
},
{
"day": "14",
"presence": "1"
},
{
"day": "15",
"presence": "0"
},
{
"day": "18",
"presence": "1"
},
{
"day": "19",
"presence": "1"
},
{
"day": "20",
"presence": "0"
},
{
"day": "21",
"presence": "1"
},
{
"day": "22",
"presence": "1"
},
{
"day": "25",
"presence": "1"
},
{
"day": "26",
"presence": "1"
},
{
"day": "27",
"presence": "0"
},
{
"day": "28",
"presence": "1"
},
{
"day": "29",
"presence": "1"
}
]
},
"person_id": "0f805072-d453-4321-8047-1f75bcb96451"
}
我想得到的是:
"select person_id, presence from attendance[2017][10] where day = 31 and presence = 1"
但我不能让它在 orientDB 中工作..
也许,出于某种原因,数据结构是 sh*tty - 请指教。
谢谢, 拉法尔
试试这个:
select
person_id,
attendance["2017"]["10"][day = "31" AND presence = "1"] as presence
from attendance
UNWIND presence
请注意,我引用了 2017、10、31 和 1,因为在您的模型中它们似乎是字符串,如果它们是数字,您可以删除引号
我明白了!
例如:
select person_id from attendance where 2017['10'] contains (day = 222 and presence=1)
那就行了。
实际上阅读文档很有帮助:http://orientdb.com/docs/1.7.8/orientdb.wiki/SQL-Where.html
如果给定的集合包含至少一个满足下一个条件的元素,则contains
运算符可以匹配。就这么简单。