рдХреБрдЫ рд╕рдордп рдкрд╣рд▓реЗ, рдореБрдЭреЗ рдПрдХ рдРрд╕реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рд▓рд┐рдЦрдиреЗ рдХрд╛ рдХрд╛рдо рд╕реМрдВрдкрд╛ рдЧрдпрд╛ рдерд╛, рдЬреЛ рд╡рд┐рджреЗрд╢реА рдореБрджреНрд░рд╛ рдмрд╛рдЬрд╝рд╛рд░ рдХреЗ рдЙрджреНрдзрд░рдгреЛрдВ рд╕реЗ рдмрд╛рд╣рд░ рдкрддрд▓реЗрдкрди рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░рддреА рд╣реИ (рдЕрдзрд┐рдХ рд╕рдЯреАрдХ, рд╕рдордп-рд╕реАрдорд╛ рдбреЗрдЯрд╛)ред
рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг: рдбреЗрдЯрд╛ рдЗрд╕ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ 1 рд╕реЗрдХрдВрдб рдХреЗ рдЕрдВрддрд░рд╛рд▓ рдкрд░ рдЗрдирдкреБрдЯ рд╣реИ:
- рд╕рд╛рдзрди рдХрд╛ рдирд╛рдо (USDEUR рдЬреЛрдбрд╝реА рдХреЛрдб, рдЖрджрд┐),
- рдпреВрдирд┐рдХреНрд╕ рд╕рдордп рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рджрд┐рдирд╛рдВрдХ рдФрд░ рд╕рдордп,
- рдУрдкрди рд╡реИрд▓реНрдпреВ (рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдкрд╣рд▓реЗ рд▓реЗрдирджреЗрди рдХреА рдХреАрдордд),
- рдЙрдЪреНрдЪ рдореВрд▓реНрдп (рдЕрдзрд┐рдХрддрдо рдореВрд▓реНрдп),
- рдХрдо рдореВрд▓реНрдп
- рдмрдВрдж рдореВрд▓реНрдп (рдЕрдВрддрд┐рдо рд╕реМрджреЗ рдХреА рдХреАрдордд),
- рд╡реЙрд▓реНрдпреВрдо (рд╡реЙрд▓реНрдпреВрдо, рдпрд╛ рд▓реЗрдирджреЗрди рдХреА рдорд╛рддреНрд░рд╛)ред
рддрд╛рд▓рд┐рдХрд╛рдУрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдХреЗ рдкреБрдирд░реНрдЧрдгрдирд╛ рдФрд░ рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝реЗрд╢рди рдХреЛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ: 5 рд╕реЗрдХрдВрдб, 15 рд╕реЗрдХрдВрдб, 1 рдорд┐рдирдЯ, 5 рдорд┐рдирдЯ, 15 рдорд┐рдирдЯ, рдЖрджрд┐ред
рд╡рд░реНрдгрд┐рдд рдбреЗрдЯрд╛ рднрдВрдбрд╛рд░рдг рдкреНрд░рд╛рд░реВрдк рдХреЛ OHLC, рдпрд╛ OHLCV (рдУрдкрди, рд╣рд╛рдИ, рд▓реЛ, рдХреНрд▓реЛрдЬрд╝, рд╡реЙрд▓реНрдпреВрдо) рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдЕрдХреНрд╕рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЖрдк рддреБрд░рдВрдд рдЙрд╕ рдкрд░ "рдЬрд╛рдкрд╛рдиреА рдореЛрдордмрддреНрддрд┐рдпрд╛рдБ" рдХрд╛ рдПрдХ рдЪрд╛рд░реНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдХрдЯреМрддреА рдХреЗ рддрд╣рдд, рдореИрдВрдиреЗ рдЙрди рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛, рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдЖ рд╕рдХрддрд╛ рд╣реВрдВ, рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЛ рдкрддрд▓рд╛ (рдмрдбрд╝рд╛) рдХрд░реЗрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдЯрдХреЙрдЗрди рдХреА рдХреАрдордд рдореЗрдВ рд╕рд░реНрджрд┐рдпреЛрдВ рдХреА рдЫрд▓рд╛рдВрдЧ, рдФрд░ рдкреНрд░рд╛рдкреНрдд рдЖрдВрдХрдбрд╝реЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рдЖрдк рддреБрд░рдВрдд рдПрдХ "рдЬрд╛рдкрд╛рдиреА рдореЛрдордмрддреНрддрд┐рдпрд╛рдБ" рдЪрд╛рд░реНрдЯ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВрдЧреЗ (рдПрдордПрд╕ рдПрдХреНрд╕реЗрд▓ рдореЗрдВ) рдРрд╕рд╛ рдПрдХ рдЪрд╛рд░реНрдЯ рднреА рд╣реИред )ред рдКрдкрд░ рджреА рдЧрдИ рддрд╕реНрд╡реАрд░ рдореЗрдВ, рдпрд╣ рдЪрд╛рд░реНрдЯ "рдмрд┐рдЯрд╕реНрдЯреИрдореНрдкрд╕" рдЯреВрд▓ рдХреЗ рд▓рд┐рдП "1 рдорд╣реАрдиреЗ" рдХреА рд╕рдордп рд╕реАрдорд╛ рдХреЗ рд▓рд┐рдП рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИред рдореЛрдордмрддреНрддреА рдХрд╛ рд╕рдлреЗрдж рд╢рд░реАрд░ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдХреАрдордд рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХрд╛ рд╕рдВрдХреЗрдд рджреЗрддрд╛ рд╣реИ, рдХрд╛рд▓рд╛ - рдХреАрдордд рдореЗрдВ рдХрдореА, рдКрдкрд░реА рдФрд░ рдирд┐рдЪрд▓реЗ рд╡рд┐рдХреНрд╕ рдЕрдзрд┐рдХрддрдо рдФрд░ рдиреНрдпреВрдирддрдо рдореВрд▓реНрдп рдЗрдВрдЧрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдЬреЛ рдЕрдВрддрд░рд╛рд▓ рдореЗрдВ рдкрд╣реБрдВрдЪ рдЧрдП рдереЗред рдкреГрд╖реНрдарднреВрдорд┐ - рд▓реЗрди-рджреЗрди рдХреА рдорд╛рддреНрд░рд╛ред рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рджреЗрдЦрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рджрд┐рд╕рдВрдмрд░ 2017 рдореЗрдВ рдХреАрдордд 20K рдХреЗ рдирд┐рд╢рд╛рди рдХреЗ рдХрд░реАрдм рдЖ рдЧрдИред
рдУрд░реЗрдХрд▓ рдФрд░ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП рджреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдЗрдВрдЬрдиреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд╛рдзрд╛рди рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЬреЛ рдХрд┐рд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдХрд╛рд░реНрдп рдХреЗ рд▓рд┐рдП рдЙрдирдХреА рддреБрд▓рдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдмрдирд╛ рджреЗрдЧрд╛ (рд╣рдо рдЕрдиреНрдп рдХрд╛рд░реНрдпреЛрдВ рдХреА рддреБрд▓рдирд╛ рдХреЛ рд╕рд╛рдорд╛рдиреНрдп рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ)ред
рдлрд┐рд░ рдореИрдВрдиреЗ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдПрдХ рддреБрдЪреНрдЫ рддрд░реАрдХреЗ рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛: рдПрдХ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рд╕рд╣реА рдерд┐рдирд┐рдВрдЧ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдФрд░ рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд╕рд╛рде рд╕рд┐рдВрдХреНрд░рдирд╛рдЗрдЬрд╝ рдХрд░рдирд╛ - рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореМрдЬреВрдж рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд╣рдЯрд╛рдирд╛ рд▓реЗрдХрд┐рди рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдореМрдЬреВрдж рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЬреЛрдбрд╝рдирд╛ рдФрд░ рд▓рдХреНрд╖реНрдп рдореЗрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИред рдЙрд╕ рд╕рдордп, рдЧреНрд░рд╛рд╣рдХ рдиреЗ рд╕рдорд╛рдзрд╛рди рдХреЛ рд╕рдВрддреБрд╖реНрдЯ рдХрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ рдХрд╛рд░реНрдп рдХреЛ рдмрдВрдж рдХрд░ рджрд┐рдпрд╛ред
рд▓реЗрдХрд┐рди рдЕрдм рдореИрдВрдиреЗ рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдХреНрдпреЛрдВрдХрд┐ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдореЗрдВ рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИ - рдПрдХ рдмрд╛рд░ рдореЗрдВ рджреЛ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдЕрдиреБрдХреВрд▓рди рдХрд░рдирд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реИ:
- рдЬрдм рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдЦрд╛рд▓реА рд╣реЛ рдФрд░ рдЖрдкрдХреЛ рдмрд╣реБрдд рдЕрдзрд┐рдХ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛ,
- рдФрд░ рдЬрдм рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдмрдбрд╝реА рд╣реЛрддреА рд╣реИ, рдФрд░ рдЖрдкрдХреЛ рдЫреЛрдЯреЗ рдЦрдВрдбреЛрдВ рдореЗрдВ рдбреЗрдЯрд╛ рдЬреЛрдбрд╝рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред
рдпрд╣ рдЗрд╕ рддрдереНрдп рдХреЗ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЖрдкрдХреЛ рд▓рдХреНрд╖реНрдп рддрд╛рд▓рд┐рдХрд╛ рдФрд░ рдЕрд╕реНрдерд╛рдпреА рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЖрдкрдХреЛ рдмрдбрд╝реЗ рд╕реЗ рд╕рдВрд▓рдЧреНрди рдХрд░рдирд╛ рд╣реЛрдЧрд╛, рдФрд░ рдЗрд╕рдХреЗ рд╡рд┐рдкрд░реАрдд рдирд╣реАрдВред рдЙрдкрд░реЛрдХреНрдд рджреЛ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдмрдбрд╝реЗ / рдЫреЛрдЯреЗ рдкрд░рд╕реНрдкрд░ рдЬреБрдбрд╝реЗ рд╣реБрдП рд╣реИрдВред рдЖрд╢рд╛рд╡рд╛рджреА рдХрдиреЗрдХреНрд╢рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдЖрдБрдХрдбрд╝реЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдирд┐рд░реНрдгрдп рдХрд░реЗрдЧрд╛, рдФрд░ рдЖрдБрдХрдбрд╝реЗ рдкреБрд░рд╛рдиреЗ рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдирд┐рд░реНрдгрдп рдЧрд▓рдд рддрд░реАрдХреЗ рд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬрд┐рд╕рд╕реЗ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ рдЖрдПрдЧреАред
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ, рдореИрдВ рдПрдХ рдмрд╛рд░ рдХреЗ рдкрддрд▓реЗ рддрд░реАрдХреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд░реВрдВрдЧрд╛ рдЬреЛ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЗ рд▓рд┐рдП рдкрд╛рдардХреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдмрд┐рдЯрдХреЙрдЗрди рдХреА рдХреАрдордд рдореЗрдВ рд╕рд░реНрджрд┐рдпреЛрдВ рдХреА рдЫрд▓рд╛рдВрдЧред
рдСрдирд▓рд╛рдЗрди рдерд┐рдирд┐рдВрдЧ рдкреНрд░рдХреНрд░рд┐рдпрд╛рдУрдВ рдХреЛ рд▓реЗрдЦ рдХреЗ рдирд┐рдЪрд▓реЗ рднрд╛рдЧ рдХреЗ рд▓рд┐рдВрдХ рдкрд░ рдЬреАрдердм рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдмрд┐рдВрджреБ рдкрд░ ... рдореЗрд░рд╛ рдХрд╛рд░реНрдп "1 рд╕реЗрдХрдВрдб" рдЯрд╛рдЗрдордлрд╝реНрд░реЗрдо рд╕реЗ рдЕрдЧрд▓реЗ рддрдХ рдкрддрд▓рд╛ рд╣реЛ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдБ рдореИрдВ рд▓реЗрди-рджреЗрди рдХреЗ рд╕реНрддрд░ (рд╕реНрд░реЛрдд рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рдлрд╝реАрд▓реНрдб STOCK_NAME, UT, ID, APRICE, AVOLUME) рд╕реЗ рдкрддрд▓реЗ рд╣реЛрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рдбрд╛рдЯрд╛ bitcoincharts.com рджреНрд╡рд╛рд░рд╛ рдЬрд╛рд░реА рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рд▓реЗрди-рджреЗрди рдХреЗ рд╕реНрддрд░ рд╕реЗ "1 рд╕реЗрдХрдВрдб" рдХреЗ рд╕реНрддрд░ рддрдХ рдХреА рдЧрд┐рд░рд╛рд╡рдЯ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдПрдХ рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ (рдСрдкрд░реЗрдЯрд░ рдХреЛ "1 рд╕реЗрдХрдВрдб" рдХреЗ рд╕реНрддрд░ рд╕реЗ рдКрдкрд░реА рд╕реНрддрд░ рддрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рджрд╢рдорд▓рд╡ рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ):
рдУрд░реЗрдХрд▓ рдкрд░:select 1 as STRIPE_ID , STOCK_NAME , TRUNC_UT (UT, 1) as UT , avg (APRICE) keep (dense_rank first order by UT, ID) as AOPEN , max (APRICE) as AHIGH , min (APRICE) as ALOW , avg (APRICE) keep (dense_rank last order by UT, ID) as ACLOSE , sum (AVOLUME) as AVOLUME , sum (APRICE * AVOLUME) as AAMOUNT , count (*) as ACOUNT from TRANSACTIONS_RAW group by STOCK_NAME, TRUNC_UT (UT, 1);
рдлрд╝рдВрдХреНрд╢рди
avg () UT (ID рджреНрд╡рд╛рд░рд╛ dense_rank рдкрд╣рд▓рд╛ рдСрд░реНрдбрд░) рд░рдЦреЗрдВ, рдЗрд╕ рддрд░рд╣ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: рдЪреВрдВрдХрд┐ рдЕрдиреБрд░реЛрдз рдЧреНрд░реБрдк BY рд╣реИ, рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреА рдЧрдгрдирд╛ рджреВрд╕рд░реЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рд░реВрдк рд╕реЗ рдХреА рдЬрд╛рддреА рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╕рдореВрд╣ рдХреЗ рднреАрддрд░, рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ UT рдФрд░ ID рджреНрд╡рд╛рд░рд╛ рд╕реЙрд░реНрдЯ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬрд┐рд╕реЗ
dense_rank рджреНрд╡рд╛рд░рд╛ рдХреНрд░рдорд╛рдВрдХрд┐рдд рдХрд┐рдпрд╛
рдЬрд╛рддрд╛ рд╣реИ ред рдЪреВрдВрдХрд┐ рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рдЕрдиреБрд╕рд░рдг рдХрд░рддрд╛ рд╣реИ, рд▓рд╛рдЗрди рдХрд╛ рдЪрдпрди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ
dense_rank 1 рд▓реМрдЯ рдЖрдпрд╛ (рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, рдиреНрдпреВрдирддрдо рдЪрдпрдирд┐рдд рд╣реИ) - рдЕрдВрддрд░рд╛рд▓ рдХреЗ рднреАрддрд░ рдкрд╣рд▓рд╛ рд▓реЗрдирджреЗрди рдЪреБрдирд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ рдиреНрдпреВрдирддрдо рдпреВрдЯреА, рдЖрдИрдбреА рдХреЗ рд▓рд┐рдП, рдпрджрд┐ рдХрдИ рд▓рд╛рдЗрдиреЗрдВ рдереАрдВ, рддреЛ рдФрд╕рдд рдорд╛рдирд╛ рдЬрд╛рдПрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдПрдХ рдкрдВрдХреНрддрд┐ (рдЖрдИрдбреА рдХреА рд╡рд┐рд╢рд┐рд╖реНрдЯрддрд╛ рдХреЗ рдХрд╛рд░рдг) рдХреА рдЧрд╛рд░рдВрдЯреА рд╣реЛрдЧреА, рдЗрд╕рд▓рд┐рдП рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рддреБрд░рдВрдд AOPEN рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖ рдЬрд╛рдПрдЧрд╛ред рдпрд╣ рдиреЛрдЯрд┐рд╕ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИ рдХрд┐
рдкрд╣рд▓рд╛ рдлрд╝рдВрдХреНрд╢рди рджреЛ рд╕рдореБрдЪреНрдЪрдп рдХреЛ рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрд┐рдд рдХрд░рддрд╛ рд╣реИред
MS SQL рдкрд░рдХреЛрдИ
рдкрд╣рд▓рд╛ / рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдп рдирд╣реАрдВ рд╣реИ (
рдкрд╣рд▓рд╛_ рдЕрдВрддрд┐рдо / рдЕрдВрддрд┐рдо_рд╡рд╛рдХреНрдп рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реИ)ред рдЗрд╕рд▓рд┐рдП, рдЖрдкрдХреЛ рддрд╛рд▓рд┐рдХрд╛ рдХреЛ рд╕реНрд╡рдпрдВ рд╕реЗ рдХрдиреЗрдХреНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдореИрдВрдиреЗ рдЕрдиреБрд░реЛрдз рдЕрд▓рдЧ рд╕реЗ рдирд╣реАрдВ рджрд┐рдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕реЗ рдиреАрдЪреЗ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ
dbo.THINNING_HABR_CVO рдкреНрд░рдХреНрд░рд┐рдпрд╛ред рдмреЗрд╢рдХ,
рдкрд╣рд▓реЗ / рдЖрдЦрд┐рд░реА рдХреЗ рдмрд┐рдирд╛ рдпрд╣ рдЗрддрдирд╛ рд╕реБрд░реБрдЪрд┐рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
рдПрдХ рдСрдкрд░реЗрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдХреИрд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? (рдпрд╣рд╛рдВ, "рдПрдХ рдСрдкрд░реЗрдЯрд░" рд╢рдмреНрдж рдХрд╛ рдЕрд░реНрде рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдСрдкрд░реЗрдЯрд░ рдПрдХ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЛрдИ рдЪрдХреНрд░ рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдЬреЛ рдбреЗрдЯрд╛ рдХреЛ рдПрдХ рд▓рд╛рдЗрди рдкрд░ "рдЦреАрдВрдЪ" рд╕рдХрддрд╛ рд╣реИред)
рдореИрдВ рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░реВрдВрдЧрд╛:
- SIMP (рд╕рд░рд▓, рд╕рд░рд▓, рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдЙрддреНрдкрд╛рдж),
- CALC (рдЧрдгрдирд╛, рдКрдкрд░реА рд╕реНрддрд░реЛрдВ рдХрд╛ рдкреБрдирд░рд╛рд╡реГрддреНрдд рдкрддрд▓рд╛рдкрди),
- рдЪрд┐рди (рдЪреАрди рдХрд╛ рд░рд╛рд╕реНрддрд╛, рд╕рднреА рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП рднрд╛рд░реА рдЕрдиреБрд░реЛрдз),
- UDAF (рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреБрд▓ рдХрд╛рд░реНрдп),
- PPTF (рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рддрд╛рд▓рд┐рдХрд╛ рдлрд╝рдВрдХреНрд╢рди, рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рд╕рдорд╛рдзрд╛рди, рд▓реЗрдХрд┐рди рдХреЗрд╡рд▓ рджреЛ рдХрд░реНрд╕рд░ рдХреЗ рд╕рд╛рде, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рджреЛ SQL рдХрдерди),
- рдореЛрдб (рдореЙрдбрд▓, рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЙрдбрд▓),
- рдФрд░ рдЖрдИрдбрд┐рдпрд╛ (рдЖрджрд░реНрд╢, рдПрдХ рдЖрджрд░реНрд╢ рд╕рдорд╛рдзрд╛рди рдЬреЛ рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ рд╣реИ)ред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рджреБрд░реНрд▓рдн рдорд╛рдорд▓рд╛ рд╣реИ рдЬрдм рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рдкреАрдкреАрдЯреАрдПрдл рд╕рдорд╛рдзрд╛рди рдУрд░реЗрдХрд▓ рдкрд░ рд╕рдмрд╕реЗ рдкреНрд░рднрд╛рд╡реА рд╣реИред
Http://api.bitcoincharts.com/v1/csv рд╕реЗ рдЯреНрд░рд╛рдВрдЬреЗрдХреНрд╢рди рдлрд╛рдЗрд▓ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВ
рдореИрдВ kraken * рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВред рд▓реЛрдХрд▓рдмреАрдЯ * рдлрд╛рдЗрд▓реЗрдВ рдмрд╣реБрдд рд╢реЛрд░ рдХрд░рддреА рд╣реИрдВ - рдЗрдирдореЗрдВ рдЕрд╡рд╛рд╕реНрддрд╡рд┐рдХ рдХреАрдорддреЛрдВ рдХреЗ рд╕рд╛рде рд╡рд┐рдЪрд▓рд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓реА рд░реЗрдЦрд╛рдПрдВ рд╣реЛрддреА рд╣реИрдВред рд╕рднреА рдХреНрд░реИрдХрди * рдореЗрдВ рд▓рдЧрднрдЧ 31M рд▓реЗрдирджреЗрди рд╣реЛрддрд╛ рд╣реИ, рдореИрдВ рд╡рд╣рд╛рдВ рд╕реЗ krakenEUR рдХреЛ рдмрд╛рд╣рд░ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдлрд┐рд░ рд▓реЗрдирджреЗрди 11M рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рдпрд╣ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдорд╛рддреНрд░рд╛ рд╣реИред
Oracle рдХреЗ рд▓рд┐рдП SQLLDR рдХреЗ рд▓рд┐рдП рдирд┐рдпрдВрддреНрд░рдг рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдФрд░ MSSQL рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрдпрд╛рдд рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Powershell рдореЗрдВ рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдЪрд▓рд╛рдПрдБред
# MODIFY PARAMETERS THERE $OracleConnectString = "THINNING/aaa@P-ORA11/ORCL" # For Oracle $PathToCSV = "Z:\10" # without trailing slash $filenames = Get-ChildItem -name *.csv Remove-Item *.ctl -ErrorAction SilentlyContinue Remove-Item *.log -ErrorAction SilentlyContinue Remove-Item *.bad -ErrorAction SilentlyContinue Remove-Item *.dsc -ErrorAction SilentlyContinue Remove-Item LoadData-Oracle.bat -ErrorAction SilentlyContinue Remove-Item LoadData-MSSQL.sql -ErrorAction SilentlyContinue ForEach ($FilenameExt in $Filenames) { Write-Host "Processing file: "$FilenameExt $StockName = $FilenameExt.substring(1, $FilenameExt.Length-5) $FilenameCtl = '.'+$Stockname+'.ctl' Add-Content -Path $FilenameCtl -Value "OPTIONS (DIRECT=TRUE, PARALLEL=FALSE, ROWS=1000000, SKIP_INDEX_MAINTENANCE=Y)" Add-Content -Path $FilenameCtl -Value "UNRECOVERABLE" Add-Content -Path $FilenameCtl -Value "LOAD DATA" Add-Content -Path $FilenameCtl -Value "INFILE '.$StockName.csv'" Add-Content -Path $FilenameCtl -Value "BADFILE '.$StockName.bad'" Add-Content -Path $FilenameCtl -Value "DISCARDFILE '.$StockName.dsc'" Add-Content -Path $FilenameCtl -Value "INTO TABLE TRANSACTIONS_RAW" Add-Content -Path $FilenameCtl -Value "APPEND" Add-Content -Path $FilenameCtl -Value "FIELDS TERMINATED BY ','" Add-Content -Path $FilenameCtl -Value "(ID SEQUENCE (0), STOCK_NAME constant '$StockName', UT, APRICE, AVOLUME)" Add-Content -Path LoadData-Oracle.bat -Value "sqlldr $OracleConnectString control=$FilenameCtl" Add-Content -Path LoadData-MSSQL.sql -Value "insert into TRANSACTIONS_RAW (STOCK_NAME, UT, APRICE, AVOLUME)" Add-Content -Path LoadData-MSSQL.sql -Value "select '$StockName' as STOCK_NAME, UT, APRICE, AVOLUME" Add-Content -Path LoadData-MSSQL.sql -Value "from openrowset (bulk '$PathToCSV\$FilenameExt', formatfile = '$PathToCSV\format_mssql.bcp') as T1;" Add-Content -Path LoadData-MSSQL.sql -Value "" }
рдЖрдЗрдП Oracle рдкрд░ рдПрдХ рд▓реЗрдирджреЗрди рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВред
create table TRANSACTIONS_RAW ( ID number not null , STOCK_NAME varchar2 (32) , UT number not null , APRICE number not null , AVOLUME number not null) pctfree 0 parallel 4 nologging;
рдУрд░реЗрдХрд▓ рдкрд░,
рд▓реЛрдбрдбреИрдЯрд╛-рдУрд░реЗрдХрд▓.рдмреАрдПрдЯреА рдлрд╝рд╛рдЗрд▓ рдЪрд▓рд╛рдПрдВ , рдкрд╣рд▓реЗ
рдкреЙрд╡рд░рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреА рд╢реБрд░реБрдЖрдд рдореЗрдВ рдХрдиреЗрдХреНрд╢рди рдкреИрд░рд╛рдореАрдЯрд░
рддрдп рдХрд┐рдП рдЧрдП рдереЗред
рдореИрдВ рдПрдХ рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВред 8 kraken * рдлрд╝рд╛рдЗрд▓реЛрдВ рдореЗрдВ рд╕рднреА 11M рд▓реЗрдирджреЗрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░рдирд╛ (рдореИрдВрдиреЗ EUR рдлрд╝рд╛рдЗрд▓ рдХреЛ рдЫреЛрдбрд╝ рджрд┐рдпрд╛) рд▓рдЧрднрдЧ 1 рдорд┐рдирдЯ рд▓рдЧрд╛ред
рдФрд░ рдРрд╕реЗ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ рдЬреЛ рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рдЕрдВрддрд░рд╛рд▓ рдХреА рд╕реАрдорд╛рдУрдВ рд╕реЗ рдЕрд▓рдЧ рдХрд░ рджреЗрдВрдЧреЗ:
create or replace function TRUNC_UT (p_UT number, p_StripeTypeId number) return number deterministic is begin return case p_StripeTypeId when 1 then trunc (p_UT / 1) * 1 when 2 then trunc (p_UT / 10) * 10 when 3 then trunc (p_UT / 60) * 60 when 4 then trunc (p_UT / 600) * 600 when 5 then trunc (p_UT / 3600) * 3600 when 6 then trunc (p_UT / ( 4 * 3600)) * ( 4 * 3600) when 7 then trunc (p_UT / (24 * 3600)) * (24 * 3600) when 8 then trunc ((trunc (date '1970-01-01' + p_UT / 86400, 'Month') - date '1970-01-01') * 86400) when 9 then trunc ((trunc (date '1970-01-01' + p_UT / 86400, 'year') - date '1970-01-01') * 86400) when 10 then 0 when 11 then 0 end; end; create or replace function UT2DATESTR (p_UT number) return varchar2 deterministic is begin return to_char (date '1970-01-01' + p_UT / 86400, 'YYYY.MM.DD HH24:MI:SS'); end;
рд╡рд┐рдХрд▓реНрдкреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВред рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╕рднреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдХреЛрдб рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдлрд┐рд░ рд▓реЙрдиреНрдЪ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯред рдкрд╣рд▓реЗ, рдХрд╛рд░реНрдп рдУрд░реЗрдХрд▓ рдХреЗ рд▓рд┐рдП рд╡рд░реНрдгрд┐рдд рд╣реИ, рдлрд┐рд░ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдХреЗ рд▓рд┐рдП
рд╡рд┐рдХрд▓реНрдк 1 - SIMP (рддреБрдЪреНрдЫ)
рд▓реЗрди-рджреЗрди рдХреЗ рдкреВрд░реЗ рд╕реЗрдЯ рдХреЛ рдХрд╛рд░реНрдЯреЗрд╢рд┐рдпрди рдЙрддреНрдкрд╛рдж рджреНрд╡рд╛рд░рд╛ 1 рд╕реЗ 10 рдХреА рд╕рдВрдЦреНрдпрд╛ рдХреЗ рд╕рд╛рде 10 рд▓рд╛рдЗрдиреЛрдВ рдХреЗ рд╕реЗрдЯ рд╕реЗ рдЧреБрдгрд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХрд▓ рд▓реЗрди-рджреЗрди рд▓рд╛рдЗрди рд╕реЗ 10 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдирд╛ рдЖрд╡рд╢реНрдпрдХ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ 10 рдЕрдВрддрд░рд╛рд▓реЛрдВ рдХреА рд╕реАрдорд╛рдУрдВ рдХреЛ рдХрд╛рдЯ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЙрд╕рдХреЗ рдмрд╛рдж, рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдЕрдВрддрд░рд╛рд▓ рд╕рдВрдЦреНрдпрд╛ рдФрд░ рдЫрдВрдЯрдиреА рдХреА рддрд╛рд░реАрдЦ рд╕реЗ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдФрд░ рдЙрдкрд░реЛрдХреНрдд рдЕрдиреБрд░реЛрдз рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред
рджреГрд╢реНрдп рдмрдирд╛рдПрдВ:
create or replace view THINNING_HABR_SIMP_V as select STRIPE_ID , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID) as UT , avg (APRICE) keep (dense_rank first order by UT, ID) as AOPEN , max (APRICE) as AHIGH , min (APRICE) as ALOW , avg (APRICE) keep (dense_rank last order by UT, ID) as ACLOSE , sum (AVOLUME) as AVOLUME , sum (APRICE * AVOLUME) as AAMOUNT , count (*) as ACOUNT from TRANSACTIONS_RAW , (select rownum as STRIPE_ID from dual connect by level <= 10) group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID);
рд╡рд┐рдХрд▓реНрдк 2 - CALC (рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐рдпреЛрдВ рдХреА рдЧрдгрдирд╛)
рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдореЗрдВ, рд╣рдо рд▓реЗрди-рджреЗрди рд╕реЗ рд▓реЗрд╡рд▓ 1 рддрдХ, рд▓реЗрд╡рд▓ 1 рд╕реЗ рд▓реЗрд╡рд▓ 2 рддрдХ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рд╕реЗ рдЗрд╕рд╕реЗ рдкрддрд▓реЗ рд╣реЛрддреЗ рд╣реИрдВред
рдПрдХ рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдБ:
create table QUOTES_CALC ( STRIPE_ID number not null , STOCK_NAME varchar2 (128) not null , UT number not null , AOPEN number not null , AHIGH number not null , ALOW number not null , ACLOSE number not null , AVOLUME number not null , AAMOUNT number not null , ACOUNT number not null ) parallel 4 pctfree 0 nologging;
рдЖрдк STRIPE_ID рдлрд╝реАрд▓реНрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдпреЛрдЧрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ рдХреЗ рдмрд┐рдирд╛ 11M рд▓реЗрдирджреЗрди рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рд╣реИред рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдХреЗ рд▓рд┐рдП, рд╕реНрдерд┐рддрд┐ рдмрджрд▓ рд╕рдХрддреА рд╣реИред рдпрд╛ рдЖрдк рдХреНрд╡реЗрд░реА рдореЗрдВ рдмреНрд▓реЙрдХ рдХреЛ рдЕрдирд▓рд╛рдЗрдХ рдХрд░рдХреЗ рдЯреЗрдмрд▓ рдХреЛ рдкрд╛рд░реНрдЯреАрд╢рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдПрдХ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдмрдирд╛рдПрдБ:
create or replace procedure THINNING_HABR_CALC_T is begin rollback; execute immediate 'truncate table QUOTES_CALC'; insert
рд╕рдорд░реВрдкрддрд╛ рдХреЗ рд▓рд┐рдП, рдПрдХ рд╕рд░рд▓ рджреГрд╢реНрдп рдмрдирд╛рдПрдВ:
create view THINNING_HABR_CALC_V as select * from QUOTES_CALC;
рд╡рд┐рдХрд▓реНрдк 3 - рдЪрд┐рди (рдЪреАрдиреА рдХреЛрдб)
рд╡рд┐рдзрд┐ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдХреНрд░реВрд░рддрд╛ рдХреЛ рдЕрд▓рдЧ рдХрд░рддреА рд╣реИ, рдФрд░ "рдЕрдкрдиреЗ рдЖрдк рдХреЛ рджреЛрд╣рд░рд╛рдПрдВ рдирд╣реАрдВ" рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ рд╣реИред рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЪрдХреНрд░реЛрдВ рдХреА рдЕрд╕реНрд╡реАрдХреГрддрд┐ред
рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рдпрд╣рд╛рдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЖрдЧреЗ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рдХрд╣рддрд╛ рд╣реВрдБ рдХрд┐ рдЗрд╕ рд╡рд┐рд╢реЗрд╖ рдХрд╛рд░реНрдп рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рджреВрд╕рд░рд╛ рд╕реНрдерд╛рди рд▓реЗрддрд╛ рд╣реИред
рдмрдбрд╝рд╛ рдирд┐рд╡реЗрджрди create or replace view THINNING_HABR_CHIN_V as with T01 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select 1 , STOCK_NAME , UT , avg (APRICE) keep (dense_rank first order by ID) , max (APRICE) , min (APRICE) , avg (APRICE) keep (dense_rank last order by ID) , sum (AVOLUME) , sum (APRICE * AVOLUME) , count (*) from TRANSACTIONS_RAW group by STOCK_NAME, UT) , T02 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T01 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T03 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T02 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T04 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T03 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T05 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T04 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T06 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T05 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T07 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T06 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T08 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T07 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T09 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T08 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) , T10 (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) as (select STRIPE_ID + 1 , STOCK_NAME , TRUNC_UT (UT, STRIPE_ID + 1) , avg (AOPEN) keep (dense_rank first order by UT) , max (AHIGH) , min (ALOW) , avg (ACLOSE) keep (dense_rank last order by UT) , sum (AVOLUME) , sum (AAMOUNT) , sum (ACOUNT) from T09 group by STRIPE_ID, STOCK_NAME, TRUNC_UT (UT, STRIPE_ID + 1)) select * from T01 union all select * from T02 union all select * from T03 union all select * from T04 union all select * from T05 union all select * from T06 union all select * from T07 union all select * from T08 union all select * from T09 union all select * from T10;
рд╡рд┐рдХрд▓реНрдк 4 - рдпреВрдбреАрдПрдПрдл
рдпреВрдЬрд░ рдбрд┐рдлрд╛рдЗрдВрдб рдПрдЧреНрд░реАрдЧреЗрдЯреЗрдб рдлрдВрдХреНрд╢рди рд╡рд╛рд▓рд╛ рд╡рд┐рдХрд▓реНрдк рдпрд╣рд╛рдВ рдирд╣реАрдВ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрд╕реЗ рдЬреАрдердм рдкрд░ рджреЗрдЦрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рд╡рд┐рдХрд▓реНрдк 5 - рдкреАрдкреАрдЯреАрдПрдл (рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдФрд░ рд╕рдорд╛рдирд╛рдВрддрд░ рддрд╛рд▓рд┐рдХрд╛ рд╕рдорд╛рд░реЛрд╣)
рдПрдХ рд╕рдорд╛рд░реЛрд╣ рдмрдирд╛рдПрдБ (рдкреИрдХреЗрдЬ рдореЗрдВ):
create or replace package THINNING_PPTF_P is type TRANSACTION_RECORD_T is record (STOCK_NAME varchar2(128), UT number, SEQ_NUM number, APRICE number, AVOLUME number); type CUR_RECORD_T is ref cursor return TRANSACTION_RECORD_T; type QUOTE_T is record (STRIPE_ID number, STOCK_NAME varchar2(128), UT number , AOPEN number, AHIGH number, ALOW number, ACLOSE number, AVOLUME number , AAMOUNT number, ACOUNT number); type QUOTE_LIST_T is table of QUOTE_T; function F (p_cursor CUR_RECORD_T) return QUOTE_LIST_T pipelined order p_cursor by (STOCK_NAME, UT, SEQ_NUM) parallel_enable (partition p_cursor by hash (STOCK_NAME)); end; / create or replace package body THINNING_PPTF_P is function F (p_cursor CUR_RECORD_T) return QUOTE_LIST_T pipelined order p_cursor by (STOCK_NAME, UT, SEQ_NUM) parallel_enable (partition p_cursor by hash (STOCK_NAME)) is QuoteTail QUOTE_LIST_T := QUOTE_LIST_T() ; rec TRANSACTION_RECORD_T; rec_prev TRANSACTION_RECORD_T; type ut_T is table of number index by pls_integer; ut number; begin QuoteTail.extend(10); loop fetch p_cursor into rec; exit when p_cursor%notfound; if rec_prev.STOCK_NAME = rec.STOCK_NAME then if (rec.STOCK_NAME = rec_prev.STOCK_NAME and rec.UT < rec_prev.UT) or (rec.STOCK_NAME = rec_prev.STOCK_NAME and rec.UT = rec_prev.UT and rec.SEQ_NUM < rec_prev.SEQ_NUM) then raise_application_error (-20010, 'Rowset must be ordered, ('||rec_prev.STOCK_NAME||','||rec_prev.UT||','||rec_prev.SEQ_NUM||') > ('||rec.STOCK_NAME||','||rec.UT||','||rec.SEQ_NUM||')'); end if; end if; if rec.STOCK_NAME <> rec_prev.STOCK_NAME or rec_prev.STOCK_NAME is null then for j in 1 .. 10 loop if QuoteTail(j).UT is not null then pipe row (QuoteTail(j)); QuoteTail(j) := null; end if; end loop; end if; for i in reverse 1..10 loop ut := TRUNC_UT (rec.UT, i); if QuoteTail(i).UT <> ut then for j in 1..i loop pipe row (QuoteTail(j)); QuoteTail(j) := null; end loop; end if; if QuoteTail(i).UT is null then QuoteTail(i).STRIPE_ID := i; QuoteTail(i).STOCK_NAME := rec.STOCK_NAME; QuoteTail(i).UT := ut; QuoteTail(i).AOPEN := rec.APRICE; end if; if rec.APRICE < QuoteTail(i).ALOW or QuoteTail(i).ALOW is null then QuoteTail(i).ALOW := rec.APRICE; end if; if rec.APRICE > QuoteTail(i).AHIGH or QuoteTail(i).AHIGH is null then QuoteTail(i).AHIGH := rec.APRICE; end if; QuoteTail(i).AVOLUME := nvl (QuoteTail(i).AVOLUME, 0) + rec.AVOLUME; QuoteTail(i).AAMOUNT := nvl (QuoteTail(i).AAMOUNT, 0) + rec.AVOLUME * rec.APRICE; QuoteTail(i).ACOUNT := nvl (QuoteTail(i).ACOUNT, 0) + 1; QuoteTail(i).ACLOSE := rec.APRICE; end loop; rec_prev := rec; end loop; for j in 1 .. 10 loop if QuoteTail(j).UT is not null then pipe row (QuoteTail(j)); end if; end loop; exception when no_data_needed then null; end; end; /
рджреГрд╢реНрдп рдмрдирд╛рдПрдВ:
create or replace view THINNING_HABR_PPTF_V as select * from table (THINNING_PPTF_P.F (cursor (select STOCK_NAME, UT, ID, APRICE, AVOLUME from TRANSACTIONS_RAW)));
рд╡рд┐рдХрд▓реНрдк 6 - MODE (рдореЙрдбрд▓ рдХреНрд▓реЙрдЬ)
рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдХреА рдЧрдгрдирд╛ рд╕рднреА 10 рд╕реНрддрд░реЛрдВ рдХреЗ рд▓рд┐рдП
рдореЙрдбрд▓ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рд╕рд╛рде
рдореЙрдбрд▓ рдЦрдВрдб рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛
рдХрд░рддрд╛ рд╣реИ ред
рд╡рд┐рдХрд▓реНрдк рднреА рдЕрд╡реНрдпрд╡рд╣рд╛рд░рд┐рдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдзреАрдорд╛ рд╣реИред рдореЗрд░реЗ рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ, 8 рдЙрдкрдХрд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП 1000 рд▓реЗрдирджреЗрди рдХреА рдЧрдгрдирд╛ 1 рдорд┐рдирдЯ рдореЗрдВ рдХреА рдЬрд╛рддреА рд╣реИред рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдордп
рдореЙрдбрд▓ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдореЗрдВ рд╡реНрдпрддреАрдд рд╣реЛрддрд╛ рд╣реИред
рдпрд╣рд╛рдВ рдореИрдВ рдпрд╣ рд╡рд┐рдХрд▓реНрдк рдХреЗрд╡рд▓ рдкреВрд░реНрдгрддрд╛ рдХреЗ рд▓рд┐рдП рджреЗрддрд╛ рд╣реВрдВ рдФрд░ рдЗрд╕ рддрдереНрдп рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ Oracle рдкрд░ рд▓рдЧрднрдЧ рд╕рднреА рдордирдорд╛рдиреЗ рдврдВрдЧ рд╕реЗ рдЬрдЯрд┐рд▓ рдЧрдгрдирд╛ PL / SQL рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛, рдПрдХ рдХреНрд╡реЗрд░реА рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдЗрд╕ рдкреНрд░рд╢реНрди рдореЗрдВ
MODEL рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдпрд╣ рд╣реИ рдХрд┐ рджрд╛рдИрдВ рдУрд░ рдХреА рдЦреЛрдЬ
рдкреНрд░рддреНрдпреЗрдХ рдирд┐рдпрдо рдХреЗ рд▓рд┐рдП рдХреА
рдЬрд╛рддреА рд╣реИ рдЬреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ 6 рд╣реИрдВред рдкрд╣рд▓реЗ рджреЛ рдирд┐рдпрдореЛрдВ рдХреА рдЧрдгрдирд╛ рдмрд╣реБрдд рдЬрд▓реНрджреА рдХреА рдЬрд╛рддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рд╕реАрдзреЗ рд╕реНрдкрд╖реНрдЯ рдкрддреЗ, рдмрд┐рдирд╛ рдЬреЛрдХрд░ рдХреЗ рд╣реЛрддреЗ рд╣реИрдВред рд╢реЗрд╖ рдЪрд╛рд░ рдирд┐рдпрдореЛрдВ рдореЗрдВ рдХреЛрдИ
рднреА рд╢рдмреНрдж рд╣реИ - рд╡рд╣рд╛рдБ рдЧрдгрдирд╛ рдзреАрдореА рд╣реИред
рджреВрд╕рд░реА рдХрдард┐рдирд╛рдИ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╕рдВрджрд░реНрдн рдореЙрдбрд▓ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреА рд╣реЛрдЧреАред рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐
MODEL рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ
рд╕реЗ рдкрд╣рд▓реЗ рдЖрдпрд╛рдо рд╕реВрдЪреА рдЬреНрдЮрд╛рдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП, рд╣рдо рдЗрд╕ рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдХреЗ рдЕрдВрджрд░ рдирдП рдЖрдпрд╛рдореЛрдВ рдХреА рдЧрдгрдирд╛ рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗред рд╢рд╛рдпрдж рдЗрд╕реЗ рджреЛ рдореЙрдбрд▓ рд╡рд╛рдХреНрдпрд╛рдВрд╢реЛрдВ рдХреА рдорджрдж рд╕реЗ рджрд░рдХрд┐рдирд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рдирд┐рдпрдореЛрдВ рдХреЗ рдХрдо рдкреНрд░рджрд░реНрд╢рди рдХреЗ рдХрд╛рд░рдг рдореИрдВрдиреЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ред
рдореИрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реВрдВ рдХрд┐ рд╕рдВрджрд░реНрдн рдореЙрдбрд▓ рдореЗрдВ
UT_OPEN рдФрд░
UT_CLOSE рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рдорд╛рди рдХрд╛рд░реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
avg () рдкрд╣рд▓реЗ (рдЕрдВрддрд┐рдо рдХреНрд░рдо рдореЗрдВ dense_rank) рдХреЛ
MODEL рд╡рд╛рдХреНрдпрд╛рдВрд╢ рдореЗрдВ рд░рдЦреЗрдВред рд▓реЗрдХрд┐рди рдпрд╣ рдФрд░ рднреА рдзреАрд░реЗ-рдзреАрд░реЗ рд╣реБрдЖ рд╣реЛрдЧрд╛ред
рдкреНрд░рджрд░реНрд╢рди рд╕реАрдорд╛рдУрдВ рдХреЗ рдХрд╛рд░рдг, рдореИрдВ рдЗрд╕ рд╡рд┐рдХрд▓реНрдк рдХреЛ рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛ред
with
рд╡рд┐рдХрд▓реНрдк 6 - рдЖрдИрдбрд┐рдпрд╛ (рдЖрджрд░реНрд╢, рдЖрджрд░реНрд╢, рд▓реЗрдХрд┐рди рдирд┐рд╖реНрдХреНрд░рд┐рдп)
рдиреАрдЪреЗ рд╡рд░реНрдгрд┐рдд рдЕрдиреБрд░реЛрдз рд╕рдВрднрд╡рддрдГ рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рд╣реЛрдЧрд╛ рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдиреНрдпреВрдирддрдо рдХреЗ рдмрд░рд╛рдмрд░ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░реЗрдЧрд╛ред
рд▓реЗрдХрд┐рди рдирд╛ рддреЛ Oracle рдФрд░ рдирд╛ рд╣реА MS SQL рдЖрдкрдХреЛ рдЗрд╕ рд░реВрдк рдореЗрдВ рдХреНрд╡реЗрд░реА рд▓рд┐рдЦрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдореЗрд░рд╛ рдорд╛рдирдирд╛ тАЛтАЛрд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдирдХ рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рд╣реИред
with QUOTES_S1 as (select 1 as STRIPE_ID , STOCK_NAME , TRUNC_UT (UT, 1) as UT , avg (APRICE) keep (dense_rank first order by ID) as AOPEN , max (APRICE) as AHIGH , min (APRICE) as ALOW , avg (APRICE) keep (dense_rank last order by ID) as ACLOSE , sum (AVOLUME) as AVOLUME , sum (APRICE * AVOLUME) as AAMOUNT , count (*) as ACOUNT from TRANSACTIONS_RAW
рдпрд╣ рдХреНрд╡реЗрд░реА Oracle рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рднрд╛рдЧ рд╕реЗ рдореЗрд▓ рдЦрд╛рддреА рд╣реИ:
рдпрджрд┐ рдПрдХ subquery_factoring_clause, рдЬреЛ рдЗрд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ subquery рдореЗрдВ рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ query_name рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рддрд╛ рд╣реИ, рддреЛ subquery_factoring_clause рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рдПрдХ рдкреБрдирд░рд╛рд╡рд░реНрддреА subquery_factoring_clause рдореЗрдВ рджреЛ рдХреНрд╡реЗрд░реА рдмреНрд▓реЙрдХ рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдП: рдкрд╣рд▓рд╛ рдПрдВрдХрд░ рд╕рджрд╕реНрдп рд╣реИ рдФрд░ рджреВрд╕рд░рд╛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рджрд╕реНрдп рд╣реИред рдПрдВрдХрд░ рд╕рджрд╕реНрдп рдХреЛ рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рджрд╕реНрдп рд╕реЗ рдкрд╣рд▓реЗ рдкреНрд░рдХрдЯ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдпрд╣ query_name рдХрд╛ рд╕рдВрджрд░реНрдн рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ рд╣реИред рд▓рдВрдЧрд░ рд╕рджрд╕реНрдп рд╕реЗрдЯ рдСрдкрд░реЗрдЯрд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рд╕рдВрдпреБрдХреНрдд рдПрдХ рдпрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдХреНрд╡реЗрд░реА рдмреНрд▓реЙрдХ рд╕реЗ рдмрдирд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ: UNION ALL, UNION, INTERSECT рдпрд╛ MINUSред рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рджрд╕реНрдп рдХреЛ рдПрдВрдХрд░ рд╕рджрд╕реНрдп рдХрд╛ рдкрд╛рд▓рди рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдХреНрд╡реЗрд░реА_рдирд╛рдо рдХрд╛ рдареАрдХ рдПрдХ рдмрд╛рд░ рд╕рдВрджрд░реНрдн рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЖрдкрдХреЛ UNION ALL рд╕реЗрдЯ рдСрдкрд░реЗрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдВрдХрд░ рд╕рджрд╕реНрдп рдХреЗ рд╕рд╛рде рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рджрд╕реНрдп рдХреЛ рдЬреЛрдбрд╝рдирд╛ рд╣реЛрдЧрд╛редрд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рд▓реЗрдЦрди рдХреЗ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЕрдиреБрдЪреНрдЫреЗрдж рдХрд╛ рдЦрдВрдбрди рдХрд░рддрд╛ рд╣реИ:
рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рджрд╕реНрдп рдореЗрдВ рдирд┐рдореНрди рдореЗрдВ рд╕реЗ рдХреЛрдИ рднреА рддрддреНрд╡ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ:
DISTINCT рдХреАрд╡рд░реНрдб рдпрд╛ рдПрдХ рдЧреНрд░реБрдк BY рдХреНрд▓реЙрдЬ
рдПрдХ рд╕рдордЧреНрд░ рд╕рдорд╛рд░реЛрд╣ред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЪреБрдирд┐рдВрджрд╛ рд╕реВрдЪреА рдореЗрдВ рд╡рд┐рд╢реНрд▓реЗрд╖рдгрд╛рддреНрдордХ рдХрд╛рд░реНрдпреЛрдВ рдХреА рдЕрдиреБрдорддрд┐ рд╣реИредрдЗрд╕ рдкреНрд░рдХрд╛рд░, рдкреБрдирд░рд╛рд╡рд░реНрддреА рд╕рджрд╕реНрдп рдореЗрдВ, рд╕рдореБрдЪреНрдЪрдп рдФрд░ рд╕рдореВрд╣рди рдХреА рдЕрдиреБрдорддрд┐ рдирд╣реАрдВ рд╣реИред
рдкрд░реАрдХреНрд╖рдг
рдЪрд▓реЛ рдЗрд╕реЗ
рдУрд░реЗрдХрд▓ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓реЗ рдХрд░рддреЗ рд╣реИрдВред
CALC рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХрд╛ рд╕рдордп рд░рд┐рдХреЙрд░реНрдб рдХрд░реЗрдВ:
exec THINNING_HABR_CALC_T
рдЪрд╛рд░ рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рдЪрд╛рд░ рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╣реИрдВ:
- THINNING_HABR_SIMP_V (рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЬрдЯрд┐рд▓ рдЪрдпрди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛),
- THINNING_HABR_CALC_V (QUOTES_CALC рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд▓реНрджреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛)
- THINNING_HABR_CHIN_V (рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рднреА рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЬрдЯрд┐рд▓ рдЪрдпрди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛),
- THINNING_HABR_PPTF_V (THINNING_HABR_PPTF рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛)ред
рд╕рднреА рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдиреЗрддреГрддреНрд╡ рдХрд╛ рд╕рдордп рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рдорд╛рдкрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рд▓реЗрдЦ рдХреЗ рдЕрдВрдд рдореЗрдВ рддрд╛рд▓рд┐рдХрд╛ рдореЗрдВ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдмрд╛рдХреА рджреГрд╢реНрдп рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд▓рд┐рдЦрддреЗ рд╣реИрдВ:
select count (*) as CNT , sum (STRIPE_ID) as S_STRIPE_ID, sum (UT) as S_UT , sum (AOPEN) as S_AOPEN, sum (AHIGH) as S_AHIGH, sum (ALOW) as S_ALOW , sum (ACLOSE) as S_ACLOSE, sum (AVOLUME) as S_AVOLUME , sum (AAMOUNT) as S_AAMOUNT, sum (ACOUNT) as S_ACOUNT from THINNING_HABR_XXXX_V
рдЬрд╣рд╛рдБ XXXX SIMP, CHIN, PPTF рд╣реИред
рдпреЗ рджреГрд╢реНрдп рднрд░реНрддреА рдкрд╛рдЪрди рдХреА рдЧрдгрдирд╛ рдХрд░рддреЗ рд╣реИрдВред рдкрд╛рдЪрди рдХреА рдЧрдгрдирд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рд╕рднреА рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рд▓рд╛рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдФрд░ рдкрд╛рдЪрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдк рдПрдХ рджреВрд╕рд░реЗ рдХреЗ рд╕рд╛рде рд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЖрдк dbms_sqlhash рдкреИрдХреЗрдЬ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕реЗрдЯ рдХреА рддреБрд▓рдирд╛ рднреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдмрд╣реБрдд рдзреАрдорд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХреЛ рдореВрд▓ рд╕реЗрдЯ рдХреЛ рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдФрд░ рд╣реИрд╢ рдЧрдгрдирд╛ рддреЗрдЬ рдирд╣реАрдВ рд╣реИред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ 12c рдореЗрдВ рдПрдХ рдкреИрдХреЗрдЬ DBMS_COMPARISON рд╣реИред
рдЖрдк рдПрдХ рд╣реА рд╕рдордп рдореЗрдВ рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдХреА рд╢реБрджреНрдзрддрд╛ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рд╣рдо рдЦреБрджрд╛рдИ рдХреЛ рдЗрд╕ рддрд░рд╣ рдХреЗ рдЕрдиреБрд░реЛрдз рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдирддреЗ рд╣реИрдВ (рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди рдореЗрдВ 11M рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде, рдпрд╣ рдЕрдкреЗрдХреНрд╖рд╛рдХреГрдд рд▓рдВрдмрд╛ рд╣реЛрдЧрд╛, рд▓рдЧрднрдЧ 15 рдорд┐рдирдЯ):
with T1 as (select 'SIMP' as ALG_NAME, a.* from THINNING_HABR_SIMP_V a union all select 'CALC', a.* from THINNING_HABR_CALC_V a union all select 'CHIN', a.* from THINNING_HABR_CHIN_V a union all select 'PPTF', a.* from THINNING_HABR_PPTF_V a) select ALG_NAME , count (*) as CNT , sum (STRIPE_ID) as S_STRIPE_ID, sum (UT) as S_UT , sum (AOPEN) as S_AOPEN, sum (AHIGH) as S_AHIGH, sum (ALOW) as S_ALOW , sum (ACLOSE) as S_ACLOSE, sum (AVOLUME) as S_AVOLUME , sum (AAMOUNT) as S_AAMOUNT, sum (ACOUNT) as S_ACOUNT from T1 group by ALG_NAME;
рд╣рдо рджреЗрдЦрддреЗ рд╣реИрдВ рдХрд┐ рдЦреБрджрд╛рдИ рд╕рдорд╛рди рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╕рднреА рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдиреЗ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рджрд┐рдПред
рдЕрдм рд╣рдо
MS SQL рдореЗрдВ рд╕рднреА рдХреЛ рд╕рдорд╛рди рд░реВрдк рд╕реЗ рдкреБрди: рдкреЗрд╢ рдХрд░реЗрдВрдЧреЗред рдореИрдВрдиреЗ рд╕рдВрд╕реНрдХрд░рдг 2016 рдкрд░ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред
рдкрд╣рд▓реЗ DBTEST рдбреЗрдЯрд╛рдмреЗрд╕ рдмрдирд╛рдПрдВ, рдлрд┐рд░ рдЙрд╕рдореЗрдВ рдПрдХ рд▓реЗрдирджреЗрди рддрд╛рд▓рд┐рдХрд╛ рдмрдирд╛рдПрдВ:
use DBTEST go create table TRANSACTIONS_RAW ( STOCK_NAME varchar (32) not null , UT int not null , APRICE numeric (22, 12) not null , AVOLUME numeric (22, 12) not null , ID bigint identity not null );
рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдП рдЧрдП рдбреЗрдЯрд╛ рдХреЛ рдбрд╛рдЙрдирд▓реЛрдб рдХрд░реЗрдВред
MSSQL рдореЗрдВ, рдлрд╝рд╛рдЗрд▓ format_mssql.bcp рдмрдирд╛рдПрдБ:
12.0 3 1 SQLCHAR 0 0 "," 3 UT "" 2 SQLCHAR 0 0 "," 4 APRICE "" 3 SQLCHAR 0 0 "\n" 5 AVOLUME ""
рдФрд░ SSMS рдореЗрдВ LoadData-MSSQL.sql рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЪрд▓рд╛рдПрдВ (рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдУрд░реЗрдХрд▓ рдХреЗ рд▓рд┐рдП рдЗрд╕ рд▓реЗрдЦ рдХреЗ рдЕрдиреБрднрд╛рдЧ рдореЗрдВ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рдХреЗрд╡рд▓ рд╢рдХреНрддрд┐рдХреГрдд рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рдЙрддреНрдкрдиреНрди рдХреА рдЧрдИ рдереА)ред
рдЖрдЗрдП рджреЛ рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ:
use DBTEST go create or alter function TRUNC_UT (@p_UT bigint, @p_StripeTypeId int) returns bigint as begin return case @p_StripeTypeId when 1 then @p_UT when 2 then @p_UT / 10 * 10 when 3 then @p_UT / 60 * 60 when 4 then @p_UT / 600 * 600 when 5 then @p_UT / 3600 * 3600 when 6 then @p_UT / 14400 * 14400 when 7 then @p_UT / 86400 * 86400 when 8 then datediff (second, cast ('1970-01-01 00:00:00' as datetime), dateadd(m, datediff (m, 0, dateadd (second, @p_UT, cast ('1970-01-01 00:00:00' as datetime))), 0)) when 9 then datediff (second, cast ('1970-01-01 00:00:00' as datetime), dateadd(yy, datediff (yy, 0, dateadd (second, @p_UT, cast ('1970-01-01 00:00:00' as datetime))), 0)) when 10 then 0 when 11 then 0 end; end; go create or alter function UT2DATESTR (@p_UT bigint) returns datetime as begin return dateadd(s, @p_UT, cast ('1970-01-01 00:00:00' as datetime)); end; go
рд╣рдо рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:рд╡рд┐рдХрд▓реНрдк 1 - SIMP
рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: use DBTEST go create or alter view dbo.THINNING_HABR_SIMP_V as with T1 (STRIPE_ID) as (select 1 union all select STRIPE_ID + 1 from T1 where STRIPE_ID < 10) , T2 as (select STRIPE_ID , STOCK_NAME , dbo.TRUNC_UT (UT, STRIPE_ID) as UT , min (1000000 * cast (UT as bigint) + ID) as AOPEN_UT , max (APRICE) as AHIGH , min (APRICE) as ALOW , max (1000000 * cast (UT as bigint) + ID) as ACLOSE_UT , sum (AVOLUME) as AVOLUME , sum (APRICE * AVOLUME) as AAMOUNT , count (*) as ACOUNT from TRANSACTIONS_RAW, T1 group by STRIPE_ID, STOCK_NAME, dbo.TRUNC_UT (UT, STRIPE_ID)) select t.STRIPE_ID, t.STOCK_NAME, t.UT, t_op.APRICE as AOPEN, t.AHIGH , t.ALOW, t_cl.APRICE as ACLOSE, t.AVOLUME, t.AAMOUNT, t.ACOUNT from T2 t join TRANSACTIONS_RAW t_op on (t.STOCK_NAME = t_op.STOCK_NAME and t.AOPEN_UT / 1000000 = t_op.UT and t.AOPEN_UT % 1000000 = t_op.ID) join TRANSACTIONS_RAW t_cl on (t.STOCK_NAME = t_cl.STOCK_NAME and t.ACLOSE_UT / 1000000 = t_cl.UT and t.ACLOSE_UT % 1000000 = t_cl.ID);
рдкрд╣рд▓реЗ / рдЕрдВрддрд┐рдо рдХрд╛рд░реНрдпреЛрдВ рдХреЛ рдорд┐рд╕ рдХрд░рдирд╛ рдбрдмрд▓ рдЯреЗрдмрд▓ рд╕реЗрд▓реНрдл-рдЬреЙрдЗрди рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИредрд╡рд┐рдХрд▓реНрдк 2 - CALC
рдПрдХ рддрд╛рд▓рд┐рдХрд╛, рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдФрд░ рджреГрд╢реНрдп рдмрдирд╛рдПрдБ: use DBTEST go create table dbo.QUOTES_CALC ( STRIPE_ID int not null , STOCK_NAME varchar(32) not null , UT bigint not null , AOPEN numeric (22, 12) not null , AHIGH numeric (22, 12) not null , ALOW numeric (22, 12) not null , ACLOSE numeric (22, 12) not null , AVOLUME numeric (38, 12) not null , AAMOUNT numeric (38, 12) not null , ACOUNT int not null ); go create or alter procedure dbo.THINNING_HABR_CALC as begin set nocount on; truncate table QUOTES_CALC; declare @StripeId int; with T1 as (select STOCK_NAME , UT , min (ID) as AOPEN_ID , max (APRICE) as AHIGH , min (APRICE) as ALOW , max (ID) as ACLOSE_ID , sum (AVOLUME) as AVOLUME , sum (APRICE * AVOLUME) as AAMOUNT , count (*) as ACOUNT from TRANSACTIONS_RAW group by STOCK_NAME, UT) insert into QUOTES_CALC (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) select 1, t.STOCK_NAME, t.UT, t_op.APRICE, t.AHIGH, t.ALOW, t_cl.APRICE, t.AVOLUME, t.AAMOUNT, t.ACOUNT from T1 t join TRANSACTIONS_RAW t_op on (t.STOCK_NAME = t_op.STOCK_NAME and t.UT = t_op.UT and t.AOPEN_ID = t_op.ID) join TRANSACTIONS_RAW t_cl on (t.STOCK_NAME = t_cl.STOCK_NAME and t.UT = t_cl.UT and t.ACLOSE_ID = t_cl.ID); set @StripeId = 1; while (@StripeId <= 9) begin with T1 as (select STOCK_NAME , dbo.TRUNC_UT (UT, @StripeId + 1) as UT , min (UT) as AOPEN_UT , max (AHIGH) as AHIGH , min (ALOW) as ALOW , max (UT) as ACLOSE_UT , sum (AVOLUME) as AVOLUME , sum (AAMOUNT) as AAMOUNT , sum (ACOUNT) as ACOUNT from QUOTES_CALC where STRIPE_ID = @StripeId group by STOCK_NAME, dbo.TRUNC_UT (UT, @StripeId + 1)) insert into QUOTES_CALC (STRIPE_ID, STOCK_NAME, UT, AOPEN, AHIGH, ALOW, ACLOSE, AVOLUME, AAMOUNT, ACOUNT) select @StripeId + 1, t.STOCK_NAME, t.UT, t_op.AOPEN, t.AHIGH, t.ALOW, t_cl.ACLOSE, t.AVOLUME, t.AAMOUNT, t.ACOUNT from T1 t join QUOTES_CALC t_op on (t.STOCK_NAME = t_op.STOCK_NAME and t.AOPEN_UT = t_op.UT) join QUOTES_CALC t_cl on (t.STOCK_NAME = t_cl.STOCK_NAME and t.ACLOSE_UT = t_cl.UT) where t_op.STRIPE_ID = @StripeId and t_cl.STRIPE_ID = @StripeId; set @StripeId = @StripeId + 1; end; end; go create or alter view dbo.THINNING_HABR_CALC_V as select * from dbo.QUOTES_CALC; go
рдореИрдВрдиреЗ MS SQL рдкрд░ рд╡рд┐рдХрд▓реНрдк 3 (CHIN) рдФрд░ 4 (UDAF) рдХреЛ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛редрд╡рд┐рдХрд▓реНрдк 5 - рдкреАрдкреАрдЯреАрдПрдл
рдПрдХ рдЯреЗрдмрд▓ рдлрдВрдХреНрд╢рди рдмрдирд╛рдПрдВ рдФрд░ рджреЗрдЦреЗрдВред рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреЗрд╡рд▓ рдПрдХ рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рд╣реИ, рди рдХрд┐ рдПрдХ рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрдЬреНрдб рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди, рдмрд╕ рд╡рд┐рдХрд▓реНрдк рдиреЗ рдУрд░реЗрдХрд▓ рд╕реЗ рдЕрдкрдирд╛ рдРрддрд┐рд╣рд╛рд╕рд┐рдХ рдирд╛рдо рдмрд░рдХрд░рд╛рд░ рд░рдЦрд╛ рд╣реИ: use DBTEST go create or alter function dbo.THINNING_HABR_PPTF () returns @rettab table ( STRIPE_ID bigint not null , STOCK_NAME varchar(32) not null , UT bigint not null , AOPEN numeric (22, 12) not null , AHIGH numeric (22, 12) not null , ALOW numeric (22, 12) not null , ACLOSE numeric (22, 12) not null , AVOLUME numeric (38, 12) not null , AAMOUNT numeric (38, 12) not null , ACOUNT bigint not null) as begin declare @i tinyint; declare @tut int; declare @trans_STOCK_NAME varchar(32); declare @trans_UT int; declare @trans_ID int; declare @trans_APRICE numeric (22,12); declare @trans_AVOLUME numeric (22,12); declare @trans_prev_STOCK_NAME varchar(32); declare @trans_prev_UT int; declare @trans_prev_ID int; declare @trans_prev_APRICE numeric (22,12); declare @trans_prev_AVOLUME numeric (22,12); declare @QuoteTail table ( STRIPE_ID bigint not null primary key clustered , STOCK_NAME varchar(32) not null , UT bigint not null , AOPEN numeric (22, 12) not null , AHIGH numeric (22, 12) , ALOW numeric (22, 12) , ACLOSE numeric (22, 12) , AVOLUME numeric (38, 12) not null , AAMOUNT numeric (38, 12) not null , ACOUNT bigint not null); declare c cursor fast_forward for select STOCK_NAME, UT, ID, APRICE, AVOLUME from TRANSACTIONS_RAW order by STOCK_NAME, UT, ID;
рдЪрд▓реЛ CALC рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП QUOTES_CALC рддрд╛рд▓рд┐рдХрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░реЗрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд▓рд┐рдЦреЗрдВ: use DBTEST go exec dbo.THINNING_HABR_CALC
рддреАрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдо рддреАрди рд╡рд┐рдЪрд╛рд░реЛрдВ рдореЗрдВ рд╣реИрдВ:- THINNING_HABR_SIMP_V (рдЧрдгрдирд╛ рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд░реЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдПрдХ рдЬрдЯрд┐рд▓ рдЪрдпрди рд╣реЛрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдЗрд╕рдореЗрдВ рд▓рдВрдмрд╛ рд╕рдордп рд▓рдЧреЗрдЧрд╛),
- THINNING_HABR_CALC_V (QUOTES_CALC рддрд╛рд▓рд┐рдХрд╛ рд╕реЗ рдбреЗрдЯрд╛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░реЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЬрд▓реНрджреА рдирд┐рд╖реНрдкрд╛рджрд┐рдд рд╣реЛрдЧрд╛)
- THINNING_HABR_PPTF_V (THINNING_HABR_PPTF рдлрд╝рдВрдХреНрд╢рди рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдЧрд╛)ред
рджреЛ рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП, рд╣рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп рд▓рд┐рдЦрддреЗ рд╣реИрдВ: select count (*) as CNT , sum (STRIPE_ID) as S_STRIPE_ID, sum (UT) as S_UT , sum (AOPEN) as S_AOPEN, sum (AHIGH) as S_AHIGH, sum (ALOW) as S_ALOW , sum (ACLOSE) as S_ACLOSE, sum (AVOLUME) as S_AVOLUME , sum (AAMOUNT) as S_AAMOUNT, sum (ACOUNT) as S_ACOUNT from THINNING_HABR_XXXX_V
рдЬрд╣рд╛рдВ XXXX SIMP, PPTF рд╣реИредрдЕрдм рдЖрдк рдПрдордПрд╕ SQL тАЛтАЛрдХреЗ рддреАрди рддрд░реАрдХреЛрдВ рдХреЗ рд▓рд┐рдП рдЧрдгрдирд╛ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдпрд╣ рдПрдХ рдЕрдиреБрд░реЛрдз рдореЗрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрд╛ рдкрд╛рд▓рди рдХрд░реЗрдВ: use DBTEST go with T1 as (select 'SIMP' as ALG_NAME, a.* from THINNING_HABR_SIMP_V a union all select 'CALC', a.* from THINNING_HABR_CALC_V a union all select 'PPTF', a.* from THINNING_HABR_PPTF_V a) select ALG_NAME , count (*) as CNT, sum (cast (STRIPE_ID as bigint)) as STRIPE_ID , sum (cast (UT as bigint)) as UT, sum (AOPEN) as AOPEN , sum (AHIGH) as AHIGH, sum (ALOW) as ALOW, sum (ACLOSE) as ACLOSE, sum (AVOLUME) as AVOLUME , sum (AAMOUNT) as AAMOUNT, sum (cast (ACOUNT as bigint)) as ACOUNT from T1 group by ALG_NAME;
рдпрджрд┐ рддреАрди рд░реЗрдЦрд╛рдПрдБ рд╕рднреА рдХреНрд╖реЗрддреНрд░реЛрдВ рдореЗрдВ рдореЗрд▓ рдЦрд╛рддреА рд╣реИрдВ, рддреЛ рддреАрди рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧрдгрдирд╛ рдХрд╛ рдкрд░рд┐рдгрд╛рдо рд╕рдорд╛рди рд╣реИредрдореИрдВ рдЖрдкрдХреЛ рджреГрдврд╝рддрд╛ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдЪрд░рдг рдореЗрдВ рдПрдХ рдЫреЛрдЯреЗ рдЪрдпрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдПрдордПрд╕ рдПрд╕рдХреНрдпреВрдПрд▓ рдореЗрдВ рдЗрд╕ рдХрд╛рд░реНрдп рдХрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрдо рд╣реИредрдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ MS SQL рдЗрдВрдЬрди рд╣реИ рдФрд░ рдмрдбрд╝реА рдорд╛рддреНрд░рд╛ рдореЗрдВ рдбреЗрдЯрд╛ рдХреА рдЧрдгрдирд╛ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк рдирд┐рдореНрди рдЕрдиреБрдХреВрд▓рди рд╡рд┐рдзрд┐ рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ: create unique clustered index TRANSACTIONS_RAW_I1 on TRANSACTIONS_RAW (STOCK_NAME, UT, ID); create unique clustered index QUOTES_CALC_I1 on QUOTES_CALC (STRIPE_ID, STOCK_NAME, UT);
рдореЗрд░реА рд╡рд░реНрдЪреБрдЕрд▓ рдорд╢реАрди рдкрд░ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдорд╛рдкрдиреЗ рдХреЗ рдкрд░рд┐рдгрд╛рдо рдирд┐рдореНрдирд╛рдиреБрд╕рд╛рд░ рд╣реИрдВ:рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рдбрд╛рдЙрдирд▓реЛрдб рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ GitHub : рдУрд░реЗрдХрд▓, Thinning рдпреЛрдЬрдирд╛ - рдЗрд╕ рд▓реЗрдЦ, THINNING_LIVE рдпреЛрдЬрдирд╛ рдХреЗ рдХрдерд╛рдирдХ - рдСрдирд▓рд╛рдЗрди рдбрд╛рдЙрдирд▓реЛрдб рдбреЗрдЯрд╛ bitcoincharts.com рд╕рд╛рдЗрдЯ рдФрд░ рдСрдирд▓рд╛рдЗрди-thinning (рд▓реЗрдХрд┐рди рдЗрд╕ рд╕рд╛рдЗрдЯ рдСрдирд▓рд╛рдЗрди рдореЛрдб рдХреЗрд╡рд▓ рдкрд┐рдЫрд▓реЗ 5 рджрд┐рдиреЛрдВ рдХреЗ рд▓рд┐рдП рдбреЗрдЯрд╛ рджреЗрддрд╛ рд╣реИ) рдФрд░ рд╕реНрдХреНрд░рд┐рдкреНрдЯ MS SQL рдХреЗ рд▓рд┐рдП рднреА рдЗрд╕ рд▓реЗрдЦ рдкрд░редрдирд┐рд╖реНрдХрд░реНрд╖:MS SQL рдкрд░ Oracle рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдпрд╣ рдХрд╛рд░реНрдп рддреЗрдЬреА рд╕реЗ рд╣рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рд▓реЗрдирджреЗрди рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдХреЗ рд╕рд╛рде, рдЕрдВрддрд░ рдЕрдзрд┐рдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрддрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИредрдУрд░реЗрдХрд▓ рдкрд░, PPTF рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдерд╛ред рдпрд╣рд╛рдВ рдкреНрд░рдХреНрд░рд┐рдпрд╛рддреНрдордХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдЕрдзрд┐рдХ рд▓рд╛рднрджрд╛рдпрдХ рдирд┐рдХрд▓рд╛, рдпрд╣ рдЕрдХреНрд╕рд░ рд╣реЛрддрд╛ рд╣реИред рдЕрдиреНрдп рд╡рд┐рдзрд┐рдпреЛрдВ рдиреЗ рднреА рдПрдХ рд╕реНрд╡реАрдХрд╛рд░реНрдп рдкрд░рд┐рдгрд╛рдо рджрд┐рдЦрд╛рдпрд╛ - рдореИрдВрдиреЗ рдПрдХ рдЖрднрд╛рд╕реА рдорд╢реАрди (рдкреАрдкреАрдЯреАрдПрдл рд╡рд┐рдзрд┐ рдХреА рдЧрдгрдирд╛ рдПрдХ рдШрдВрдЯреЗ рдФрд░ рдбреЗрдврд╝ рдШрдВрдЯреЗ рдореЗрдВ рдХреА) рдореЗрдВ 367M рд▓реЗрдирджреЗрди рдХреА рдорд╛рддреНрд░рд╛ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛редMS SQL рдкрд░, рдкреБрдирд░рд╛рд╡реГрддреНрддрд┐ рдЧрдгрдирд╛ рд╡рд┐рдзрд┐ (CALC) рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рдЙрддреНрдкрд╛рджрдХ рдмрди рдЧрдИредрдУрд░реЗрдХрд▓ рдкрд░ PPTF рдкрджреНрдзрддрд┐ рдиреЗрддрд╛ рдХреНрдпреЛрдВ рдмрдиреА? рд╕рдорд╕рд╛рдордпрд┐рдХрддрд╛ рдФрд░ рд╡рд╛рд╕реНрддреБрдХрд▓рд╛ рдХреЗ рдХрд╛рд░рдг, рдПрдХ рдлрд╝рдВрдХреНрд╢рди рдЬреЛ рд╕рдорд╛рдирд╛рдВрддрд░ рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдЯреЗрдмрд▓ рдлрд╝рдВрдХреНрд╢рди рдХреЗ рд░реВрдк рдореЗрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдХреНрд╡реЗрд░реА рдпреЛрдЬрдирд╛ рдХреЗ рдмреАрдЪ рдореЗрдВ рдПрдореНрдмреЗрдбреЗрдб рд╣реИ: